Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2014, 08:08   #1
cska1325
Пользователь
 
Регистрация: 19.12.2014
Сообщений: 16
По умолчанию Срочно! Найти ошибку в программе.

Помогите найти ошибки в программах и исправить её.

№1

Вариант 13
В одномерном массиве, состоящем из n вещественных элементов, вычислить:
1) Количество элементов массива, лежащих в диапазоне от А до В.
2) Сумму элементов массива, расположенных после максимального элемента.
3) Упорядочить элементы массива по убыванию.

Код:
Program var_13;
Uses crt;
Type mas=array [1..50] of real;
Var
 b:mas;
max,i,l,j:intejer;
v,n,a,s,x:real;
begin
clrscr;
for i:=1 to 50 do
begin
b[i]:=cos(i);
write(b[i]:5:3,’  ‘);
end;
writeln(‘Введите диапазон’);
readln(v,n);
max:=0;
i:=0;
for i:=1 to 50 do
if (b[i]>=v) and (b[i]<=n) then
i:=i+1:
writeln(‘Количество элементов=’,l);
s:=0;
j:=1;
for i:=1 to 50 do
if b[i] > b[j] then
j:=i;
for i:=i+1 to 50 do;
s:=s+b[i];
writeln(‘Сумма элементов после максимального значения:’,s:5:3);
for i:=1 to 50-1 do
for j:=i+1 to 50 do
if b[i] < b[j] then
begin
x:=b[i];
b[i]:=b[j];
b[j]:=x;
end;
writeln(‘Упорядоченный массив по убыванию’);
for i:=1 to 50 do
write(b[i]:5:3,’  ‘);
readln;
end.
№2

Вариант 13
1.Файл содержит сведения о месячной зарплате, каждая запись которого содержит поля: фамилия работника и заработная плата.
2.Выдать информацию о работниках с заработной платой выше средней.

Код:
Progam file13;
uses crt;
const
n=3;
type
mess=record
F:string;
Z:integer;
end;
var
F1:file of mess;
srZ,Z,i,w,j,k:integer;
st:array [1..n] of mess;
s:mess;
begin
clrscr
assign(F1,’mes_zar.txt’);
{$i-}
reset(F1);
{$i+}
if IOresult < >0 then
begin
writeln(‘Файла нет.Создать?’);
rewrite(F1);
for i:=1 to n do
with st[i] do
begin
writeln(‘Введите фамилию работника:’);
readln(F);
writeln(‘Введите зарплату:’);
readln(Z);
end;
seek(F1,0);
for k:=1 to n -1 do
for j:=k+1 to n do
if st[k].F>st[i].F then
begin
s:=st[k];
st[k]:=st[j];
st[j]:=s;
end;
for i:=1 to n do
writeln(st[i].F,’  ‘,st[i].Z,’  ‘);
w:=0;
for i:=1 to n do
with st[i] do
begin
w:=w+Z;
end;
writeln(w);
begin
srZ:=w div n;
writeln(‘Средняя зарпата’,srZ);
end;
begin for i:=1 to n do
if st[i].Z > srZ then
writeln(st[i].F,’  ‘,st[i].Z,’   ‘);
for i:=1 to n do
end;
for i:=1 to n do
writeln(F1,st[i]);
readln;
end;
end.

Последний раз редактировалось Stilet; 22.12.2014 в 08:26.
cska1325 вне форума Ответить с цитированием
Старый 22.12.2014, 14:41   #2
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

добавить бы проверку, что б пользователь не мог в вести интервал от 9 до 1 к примеру.
Код:
writeln(‘Введите диапазон’);
readln(v,n);
1 переменная L не объявлена
2 вы считаете количество элементов в той же переменной что и цикл считает шаг
3 вы выводите "пустую" переменную
Код:
var
F1:file of mess;
srZ,Z,i,w,j,k:integer;
..........
i:=0;
for i:=1 to 50 do
if (b[i]>=v) and (b[i]<=n) then
i:=i+1:
writeln(‘Количество элементов=’,l);
1 сумму элементов после J а не после I нужно искать
2 for i:=i+1 to 50 do; как то не понятненько по идее нужно I:=J
Код:
s:=0;
j:=1;
for i:=1 to 50 do
if b[i] > b[j] then
j:=i;
for i:=i+1 to 50 do;
s:=s+b[i];
writeln(‘Сумма элементов после максимального значения:’,s:5:3);
вроде все)
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 22.12.2014, 14:50   #3
cska1325
Пользователь
 
Регистрация: 19.12.2014
Сообщений: 16
По умолчанию

А можно вас попросить разграничить ваш ответ.
К какой из программ относятся ваши замечания.
И если вас не затруднит напишите мне программу уже в исправленном виде.
cska1325 вне форума Ответить с цитированием
Старый 22.12.2014, 15:20   #4
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

затруднит, замечания относятся к первой программе, если быть точным то я не менял кода приведенного вами. я только указал на ошибки. попробуйте исправить, что не получится спрашивайте.
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 22.12.2014, 15:27   #5
cska1325
Пользователь
 
Регистрация: 19.12.2014
Сообщений: 16
По умолчанию

Во втором фрагменте кода вы взяли описание переменных из второй программы(с файлом), а вторую часть из первой(массив)
cska1325 вне форума Ответить с цитированием
Старый 22.12.2014, 15:30   #6
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Дико извиняюсь.

Код:
Var
 b:mas;
max,i,l,j:intejer;
v,n,a,s,x:real;
............
l:=0;
for i:=1 to 50 do
if (b[i]>=v) and (b[i]<=n) then
l:=l+1;
writeln(‘Количество элементов=’,l);
вот вам исправленный кусок за мою оплошность
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 22.12.2014, 15:42   #7
cska1325
Пользователь
 
Регистрация: 19.12.2014
Сообщений: 16
По умолчанию

в треьем фрагменте вы пишите "1)сумму элементов после J а не после I нужно искать2)for i:=i+1 to 50 do; как то не понятненько по идее нужно I:=J"
т.е. это должно выглядеть так??
Код:
s:=0;
j:=1;
for i:=1 to 50 do
if b[i] > b[j] then
j:=i;
s=s+b[i];
i:=j;
writeln(‘Сумма элементов после максимального значения:’,s:5:3);
или я чего-то не понял...
cska1325 вне форума Ответить с цитированием
Старый 22.12.2014, 15:58   #8
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от cska1325 Посмотреть сообщение
или я чего-то не понял...
не поняли

Код:
....
for i:=j+1 to 50 do; 
s=s+b[i]
....
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Старый 22.12.2014, 16:04   #9
cska1325
Пользователь
 
Регистрация: 19.12.2014
Сообщений: 16
По умолчанию

я наверное опять не понял.
ну вот как-то так...
Код:
s:=0;
j:=1;
for i:=1 to 50 do
j:=i;
for i:=j+1 to 50 do;
if b[i] > b[j] then
s:=s+b[i];
writeln(‘Сумма элементов после максимального значения:’,s:5:3);
cska1325 вне форума Ответить с цитированием
Старый 22.12.2014, 16:08   #10
Dvoishnik
Форумчанин
 
Регистрация: 12.02.2011
Сообщений: 808
По умолчанию

Цитата:
Сообщение от cska1325 Посмотреть сообщение
я наверное опять не понял.
ну вот как-то так...
Код:
s:=0;
j:=1;
for i:=1 to 50 do
j:=i; 
for i:=j+1 to 50 do;
if b[i] > b[j] then // это под первый цикл перенести нужно. 
s:=s+b[i];
writeln(‘Сумма элементов после максимального значения:’,s:5:3);
попробуйте сделать построчный комментарий приводимого вами кода. ошибки простые
Терпение!Дежурный экстрасенс скоро свяжется с вами!
Dvoishnik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти ошибку в программе Александрq Помощь студентам 4 05.11.2012 01:47
найти ошибку в программе aleko05 Помощь студентам 6 07.10.2012 17:57
найти ошибку в программе (С++) Vally Помощь студентам 3 17.01.2012 18:08
Помогите найти ошибку в программе (C++) Olya90 Помощь студентам 1 28.03.2009 16:36
Помогите найти ошибку в программе KnDmPetr Паскаль, Turbo Pascal, PascalABC.NET 5 10.03.2008 14:19