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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2012, 10:54   #1
WiZzarD94
Пользователь
 
Регистрация: 13.12.2012
Сообщений: 17
По умолчанию (Delphi) циклы. задание и мой код внутри. Проверте

Вводя в цикле по четыре оценки, полученные каждым студентом в сессию, подсчитать число студентов, не имеющих оценок 2 и 3. В группе учится N студентов


var
k,s,a1,a2,a3,a4,j,n,a:integer;
begin
s:=0; {s - количество хорошистов}
k:=1;
memo1.clear;
begin
a1:=Strtoint(edit1.Text);
a2:=Strtoint(edit2.Text);
a3:=Strtoint(edit3.Text);
a4:=Strtoint(edit4.Text);
n:=Strtoint(edit5.Text);
if (a1<2) or (a1>5) or (a2<2) or (a2>5) or (a3<2) or (a3>5) or (a4<2) or (a4>5)
then memo1.Lines.Add('несоответствующая оценка')
end;
repeat
begin
if (a1>3) and (a2>3) and (a3>3) and (a4>3)
then k:=k+1;
s:=s+1; end
until s=s+1;
a:=k mod 100;
If (a=11) or (a=12) or (a=13) or (a=14)
then memo1.Lines.Add('Количество хорошистов');
memo1.Lines.add(floattostr(k));
begin a:=k mod 10;
if a=1 then writeln('Не имеют оценок "2" и "3": ',k,' студент')
else if (a=2) or (a=3) or (a=4)
then writeln('Не имеют оценок "2" и "3": ',k,' студента')
else writeln('Не имеют оценок "2" и "3": ',k,' студентов');


end;
end;
end.
WiZzarD94 вне форума Ответить с цитированием
Старый 17.12.2012, 11:37   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

1. Очень много лишних begin-end
2. Внутри цикла repeat не нужны begin-end
3. Сам цикл вызывает серьезные сомнения, что он когда-нибудь завершится при условии повторять ... до s=s+1;
4. WriteLn используется для консольного вывода, у Вас в коде путаница - вывод происходит то в мемо, то в консоль.
5. В конце кода - проверка окончания (студент, студента, студентов) - алгоритм правильный, но не учтено k=11..19, где остаток от деления не соответствует окончанию (студентОВ). В принципе, такие задачи на форуме уже решались:

Код:

if (k>=11) and (k<=19) then memo1.Lines.Add('Не имеют оценок "2" и "3": '+IntToStr(k)+' студентов')
else begin
  a:=k mod 10;
  case a of
    1: memo1.Lines.Add('Не имеют оценок "2" и "3": '+IntToStr(k)+' студент');
    2..4: memo1.Lines.Add('Не имеют оценок "2" и "3": '+IntToStr(k)+' студента');
    5..9,0: memo1.Lines.Add('Не имеют оценок "2" и "3": '+IntToStr(k)+' студентов');
  end;
end;
6. Ну и, наконец, самое главное: у Вас в коде смесь консольного и обычного приложения Delphi, поэтому работать оно, вероятнее всего, не будет.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 17.12.2012 в 11:56.
Sciv вне форума Ответить с цитированием
Старый 17.12.2012, 13:51   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

WiZzarD94, кросспостить не надо! Посмотрите, Вам ответили в вашей теме, которую я закрыл..
Serge_Bliznykov вне форума Ответить с цитированием
Старый 17.12.2012, 13:59   #4
WiZzarD94
Пользователь
 
Регистрация: 13.12.2012
Сообщений: 17
По умолчанию

6. Ну и, наконец, самое главное: у Вас в коде смесь консольного и обычного приложения Delphi, поэтому работать оно, вероятнее всего, не будет.[/QUOTE]


var
N,R,I,A,B,C,D:integer;
begin
if N>0 then
begin
R:=0;
for I:= 1 to N do
begin
A:=Strtoint(edit1.Text);
B:=Strtoint(edit2.Text);
C:=Strtoint(edit3.Text);
D:=Strtoint(edit4.Text);
if (A > 3) and (B > 3) and (C > 3) and (D > 3) then
R := R + 1;
end;
memo1.Lines.Add('===========');
memo1.Lines.Add('Всего чисел:');
memo1.Lines.add(floattostr(R));

end;
end;
end.


А так?

Последний раз редактировалось WiZzarD94; 17.12.2012 в 14:09.
WiZzarD94 вне форума Ответить с цитированием
Старый 17.12.2012, 14:02   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Чего "А так?" N Вы откуда берете?
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CryptoAPI, Delphi: Что нужно изменить в проге, чтоб стал мой вариант (задание по программированию)? Fissa Помощь студентам 6 07.12.2012 20:43
Обработка одномерных массивов, СИ. задание внутри, и написанный мною текст программы тоже внутри. кое-что нужно исправить.. Амелия Общие вопросы C/C++ 6 02.04.2012 20:03
Проверте код (СИ структуры) Hacker))) Общие вопросы C/C++ 0 08.03.2012 22:03
Проверте программный код. St.Jimmy Помощь студентам 1 19.01.2011 20:57
Нахождение слов-анаграмм, Ошибка выдается. Задание внутри. Код внутри. TYMON Общие вопросы .NET 2 22.11.2010 21:07