Форум программистов, компьютерный форум, киберфорум
Наши страницы

Delphi для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Skyes
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 39
#1

Сведения о ученике. Проверьте задачу - Delphi

09.05.2012, 23:09. Просмотров 1068. Ответов 13
Метки нет (Все метки)

Здравствуйте, проверьте пожалуйста задачку.
Только вот есть проблема, задаю кол-во оценок ученика, но у меня выводится только первая из всех оценок. Хотелось бы решить эту проблему, но что-то не допер как...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
program str129n24e11;
{Сведения об ученике состоят из его имени и фамилии, названия класса (года
обучения и буквы), в котором он учится, оценок, полученных учеником за
последнюю четверть. Пусть дан массив, содержащий сведения об учениках
школы:
e) выясните, на сколько человек в восьмых классах больше, чем в десятых;}
 
{$APPTYPE CONSOLE}
 
uses
  Windows,
  SysUtils;
 
const
  n = 3; {Количество учеников}
  maxn = 10;  {Макс кол-во оценок одного ученика}
 
Type Tocenka = array [1..maxn] of integer; { тип массив оценок одного ученика}
     student = record
      name: string;             {Имя}
      surname: string;         {Фамилия}
      god: integer;              {Год обучения, то есть нынешний класс}
      klass: char;               {Литера класса}
      chetvert: Tocenka;         {Оценки за последнюю четверть}
      end;
 
Var x: array [1..n] of student;
    i: integer;
    god8: integer;              {Количество учащихся в 8-ых классах}
    god10: integer;             {Количество учащихся в 10-ых классах}
 
begin
setconsolecp(1251);
setconsoleoutputcp(1251);      {Включаем русский язык}
for i:= 1 to n do              {Вводим данные об учениках}
    with x[i] do
    begin
         writeln('Введите имя: ');
          readln(name);
         writeln('Введите фамилию: ');
          readln(surname);
         writeln('Введите год обучения: ');
          readln(god);
         writeln('Введите класс: ');
          readln(klass);
         writeln ('Оценки за четверть: ');
          readln (chetvert[i]);
    end;
writeln(' ');
For i:= 1 to n do         {Для наглядности выводим данные на экран}
    with x[i] do
    begin
writeln('Имя: ',name:8,' Фамилия: ',surname:10,' Год: ',god:2,' Класс: ',klass:1,'  Оценки: ',chetvert[i]:8);
    end;
For i:= 1 to n do
    begin
         if x[i].god=8      {Подсчитываем количество учащихся в 8-ых классах}
         then inc(god8);
 
         if x[i].god=10
         then inc(god10);   {Подсчитываем количество учащихся в 10-ых классах}
    end;
if god8>god10
  then writeln('Больше на ',god8-god10);
if god8<god10
  then writeln('Меньше на ',god10-god8);
if god8=god10
  then writeln('Одинаковое количество');
readln;
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2012, 23:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сведения о ученике. Проверьте задачу (Delphi):

НАрод, пожалуста, с этого сайта задачу, очень надо сделать задачу - Delphi
http://www.delphiplus.org/praktikum-po-delphi/prakticheskaya-rabota-34-igra.html

в одной форме ввожу данные об ученике выводится результат со второй формы но не выводит данные с перовой форм - Delphi
Тут такая проблема в одной форме ввожу данные об ученике на второй форме есть программа для тестирования в конце выводится результат со...

Сведения об ученике - Free Pascal
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится, а также от- ...

Записи. Сведения об ученике состоят из его имени и фамилии, названия класса - Turbo Pascal
Сведения об ученике состоят из его имени и фамилии и названия класса (года обучения и буквы), в котором он учится и оценок полученных...

Файл record: Сведения об ученике состоят из его фамилии, имени и названии класса, в котором он учится - Pascal ABC
Помогите, пожалуйста!!! Сведения об ученике состоят из его фамилии, имени и названии класса, в котором он учится. Дан файл, содержащий...

Проверьте задачу - Электричество и магнетизм
Из проволоки длиной l = 1 м сделана квадратная рамка. По рамке течет ток 1 = 10 А. Найти индукцию магнитного поля в центре рамки. ...

13
sokos
4 / 2 / 1
Регистрация: 09.05.2012
Сообщений: 11
10.05.2012, 00:25 #2
Если кратко - вы неправильно вводите и выводите массив оценок.
Поясню подробнее:

у вас есть следующий блок кода:
Delphi
1
2
3
4
5
6
for i:= 1 to n do              {Вводим данные об учениках}
    with x[i] do
    begin
    .........
    readln (chetvert[i]);
    end;
Смысловая нагрузка текущего кода следующая - для каждого i-ого ученика мы прочтем\запишем лишь i-ую оценку.
Для первого - первую, для второго лишь вторую и т.д.

Так что вносим изменения вида
1)Создаем переменную для счетчика цикла
Delphi
1
 var j:integer;
2)Добавляем второй цикл в двух местах: в моменте ввода и в моменте вывода.
К примеру так:
Delphi
1
2
         writeln ('Оценки за четверть: ');
          for j:=1 to maxn do readln (chetvert[i]);
И работа программы изменится следующим образом - необходимо будет ввести 10 оценок вместо одной, разделяя их нажатием кнопки Enter
0
Skyes
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 39
10.05.2012, 00:50  [ТС] #3
Цитата Сообщение от sokos Посмотреть сообщение
Если кратко - вы неправильно вводите и выводите массив оценок.
Поясню подробнее:

у вас есть следующий блок кода:
Delphi
1
2
3
4
5
6
for i:= 1 to n do              {Вводим данные об учениках}
    with x[i] do
    begin
    .........
    readln (chetvert[i]);
    end;
Смысловая нагрузка текущего кода следующая - для каждого i-ого ученика мы прочтем\запишем лишь i-ую оценку.
Для первого - первую, для второго лишь вторую и т.д.

Так что вносим изменения вида
1)Создаем переменную для счетчика цикла
Delphi
1
 var j:integer;
2)Добавляем второй цикл в двух местах: в моменте ввода и в моменте вывода.
К примеру так:
Delphi
1
2
         writeln ('Оценки за четверть: ');
          for j:=1 to maxn do readln (chetvert[i]);
И работа программы изменится следующим образом - необходимо будет ввести 10 оценок вместо одной, разделяя их нажатием кнопки Enter
Все равно показывает лишь 1 оценку, а не все...

Ой, извините, я не правильно задал вопрос.
"Только вот есть проблема, задаю кол-во оценок ученика, но у меня выводится только первая из всех оценок. Хотелось бы решить эту проблему, но что-то не допер как..."
Количество оценок задано "maxn = 10", а мне нужно чтобы выводило на экран ВСЕ имеющиеся оценки...
0
Одиночка
3927 / 1852 / 88
Регистрация: 16.03.2012
Сообщений: 3,869
10.05.2012, 04:15 #4
Если быть точным, то строку 47 заменить на:
Delphi
1
  For j:=1 to maxn do readln (chetvert[j]);
а строку 53 на:
Delphi
1
2
3
  write('Имя: ',name:8,' Фамилия: ',surname:10,' Год: ',god:2,' Класс: ',klass:1,'  Оценки:');
  For j:=1 to maxn do Write(' ',chetvert[j]);
  WriteLn;
Предварительно, естественно, описать переменную j.
1
Skyes
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 39
10.05.2012, 17:24  [ТС] #5
Цитата Сообщение от Одиночка Посмотреть сообщение
Если быть точным, то строку 47 заменить на:
Delphi
1
  For j:=1 to maxn do readln (chetvert[j]);
а строку 53 на:
Delphi
1
2
3
  write('Имя: ',name:8,' Фамилия: ',surname:10,' Год: ',god:2,' Класс: ',klass:1,'  Оценки:');
  For j:=1 to maxn do Write(' ',chetvert[j]);
  WriteLn;
Предварительно, естественно, описать переменную j.
Сделал как вы сказали, но у меня заместо оценок почему-то выводит нули.

Delphi
1
for j:=1 to maxn do writeln(' ',chetvert[j]);
Тут я дописал writeln, без него выглядит намного хуже...
0
Одиночка
3927 / 1852 / 88
Регистрация: 16.03.2012
Сообщений: 3,869
10.05.2012, 17:41 #6
Попробуй при вводе и при выводе явно задать:
Delphi
1
For j:=1 to maxn do readln (x[i].chetvert[j]);
и
Delphi
1
For j:=1 to maxn do Write(' ',x[i].chetvert[j]);
Если не поможет - выложи ещё раз код, который получился.
1
Skyes
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 39
10.05.2012, 19:16  [ТС] #7
Цитата Сообщение от Одиночка Посмотреть сообщение
Попробуй при вводе и при выводе явно задать:
Delphi
1
For j:=1 to maxn do readln (x[i].chetvert[j]);
и
Delphi
1
For j:=1 to maxn do Write(' ',x[i].chetvert[j]);
Если не поможет - выложи ещё раз код, который получился.
Спасибо! Теперь все правильно работает.
Вот код, если кому-то понадобится.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
program str129n24e11;
{ÑâåäåГ*ГЁГї îá ГіГ·ГҐГ*ГЁГЄГҐ ñîñòîÿò ГЁГ§ ГҐГЈГ® èìåГ*ГЁ ГЁ ГґГ*ìèëèè, Г*Г*çâГ*Г*ГЁГї ГЄГ«Г*Г±Г±Г* (ãîäГ*
îáó÷åГ*ГЁГї ГЁ ГЎГіГЄГўГ»), Гў êîòîðîì Г®Г* ГіГ·ГЁГІГ±Гї, îöåГ*îê, ïîëó÷åГ*Г*ûõ ГіГ·ГҐГ*èêîì Г§Г*
ïîñëåäГ*ГѕГѕ ÷åòâåðòü. ГЏГіГ±ГІГј Г¤Г*Г* Г¬Г*Г±Г±ГЁГў, ñîäåðæГ*Г№ГЁГ© ñâåäåГ*ГЁГї îá ГіГ·ГҐГ*ГЁГЄГ*Гµ
øêîëû:
e) âûÿñГ*ГЁГІГҐ, Г*Г* ñêîëüêî ÷åëîâåê Гў âîñüìûõ ГЄГ«Г*Г±Г±Г*Гµ áîëüøå, Г·ГҐГ¬ Гў äåñÿòûõ;}
 
{$APPTYPE CONSOLE}
 
uses
 Windows,
 SysUtils;
 
const
 n = 3; {Êîëè÷åñòâî ГіГ·ГҐГ*èêîâ}
 maxn = 10;  {ГЊГ*ГЄГ± êîë-ГўГ® îöåГ*îê îäГ*îãî ГіГ·ГҐГ*ГЁГЄГ*}
 
Type Tocenka = array [1..maxn] of integer; { ГІГЁГЇ Г¬Г*Г±Г±ГЁГў îöåГ*îê îäГ*îãî ГіГ·ГҐГ*ГЁГЄГ*}
     student = record
      name: string;             {Èìÿ}
      surname: string;         {Г”Г*ìèëèÿ}
      god: integer;              {Ãîä îáó÷åГ*ГЁГї, ГІГ® ГҐГ±ГІГј Г*Г»Г*ГҐГёГ*ГЁГ© ГЄГ«Г*Г±Г±}
      klass: char;               {ËèòåðГ* ГЄГ«Г*Г±Г±Г*}
      chetvert: Tocenka;         {ÎöåГ*ГЄГЁ Г§Г* ïîñëåäГ*ГѕГѕ ÷åòâåðòü}
      end;
 
Var x: array [1..n] of student;
    i,j: integer;
    god8: integer;              {Êîëè÷åñâî ГіГ·Г*ùèõñÿ Гў 8-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
    god10: integer;             {Êîëè÷åñâî ГіГ·Г*ùèõñÿ Гў 10-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
 
begin
setconsolecp(1251);
setconsoleoutputcp(1251);      {Âêëþ÷Г*ГҐГ¬ ðóññêèé ÿçûê}
for i:= 1 to n do              {Ââîäèì Г¤Г*Г*Г*ûå îá ГіГ·ГҐГ*ГЁГЄГ*Гµ}
    with x[i] do
    begin
         writeln('Ââåäèòå èìÿ: ');
          readln(name);
         writeln('Ââåäèòå ГґГ*ìèëèþ: ');
          readln(surname);
         writeln('Ââåäèòå ãîä îáó÷åГ*ГЁГї: ');
          readln(god);
         writeln('Ââåäèòå ГЄГ«Г*Г±Г±: ');
          readln(klass);
         writeln ('ÎöåГ*ГЄГЁ Г§Г* ÷åòâåðòü: ');
              for j:=1 to maxn do readln (x[i].chetvert[j]);
    end;
writeln(' ');
 
for i:= 1 to n do         {Äëÿ Г*Г*ãëÿäГ*îñòè âûâîäèì Г¤Г*Г*Г*ûå Г*Г* ГЅГЄГ°Г*Г*}
    with x[i] do
    begin
     writeln('Èìÿ: ',name:8,' Г”Г*ìèëèÿ: ',surname:10,' Ãîä: ',god:2,' ГЉГ«Г*Г±Г±: ',klass:1,'  ГЋГ¶ГҐГ*ГЄГЁ: ');
     for j:=1 to maxn do writeln(' ',x[i].chetvert[j]);
    end;
for i:= 1 to n do
    begin
         if x[i].god=8      {Ïîäñ÷èòûâГ*ГҐГ¬ êîëè÷åñòâî ГіГ·Г*ùèõñÿ Гў 8-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
          then inc(god8);
 
         if x[i].god=10
          then inc(god10);   {Ïîäñ÷èòûâГ*ГҐГ¬ êîëè÷åñòâî ГіГ·Г*ùèõñÿ Гў 10-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
    end;
if god8>god10
  then writeln('Áîëüøå Г*Г* ',god8-god10);
if god8<god10
  then writeln('ГЊГҐГ*ГјГёГҐ Г*Г* ',god10-god8);
if god8=god10
  then writeln('ÎäèГ*Г*êîâîå êîëè÷åñòâî ГіГ·ГҐГ*èêîâ');
readln;
end.
0
Skyes
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 39
28.05.2012, 18:38  [ТС] #8
Возникли проблемы при сдаче задачи.
В общем, нужно переделать задачку так, чтобы количество учеников подавалась не как константа, а пользователь должен вводить ее сам. Но у меня выдается ошибка в строке
Delphi
1
x: array [1..n] of student;
Раньше я использовал константу n(т.е. кол-во заранее задавал.)
Плюс мне нужно чтобы выводило не просто оценки ученика, а каждому предмету присваивать определенную оценку, что я в принципе и попытался сделать. Но опять же возникают ошибки при некоторых циклах. Опять же с теми оценками проблема...
Помогите пожалуйста исправить код...

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
program str129n24e11;
{Сведения об ученике состоят из его имени и фамилии, названия класса (года
обучения и буквы), в котором он учится, оценок, полученных учеником за
последнюю четверть. Пусть дан массив, содержащий сведения об учениках
школы:
e) выясните, на сколько человек в восьмых классах больше, чем в десятых;}
 
{$APPTYPE CONSOLE}
 
uses
 Windows,
 SysUtils;
 
const
 maxn = 5;  {Макс кол-во оценок одного ученика}
 
Type Tocenka = array [1..maxn] of integer; {Тип массив оценок одного ученика}
     student = record
      name: string;             {Имя}
      surname: string;         {Фамилия}
      god: integer;             {Год обучения, то есть нынешний класс}
      klass: char;               {Литера класса}
      chetvert: Tocenka;       {Оценки за последнюю четверть}
      end;
 
 
Var i,j,n: integer;
    b:Tocenka;
    d:student;
    x: array [1..n] of student;
    god8: integer;              {Количесво учащихся в 8-ых классах}
    god10: integer;             {Количесво учащихся в 10-ых классах}
 
procedure write_ocenki(var a:Tocenka);
var i,rus,math,geo,info,fizra:integer;
begin
 for i:= 1 to n do              {Вводим данные об оценках ученика}
    with x[i] do
    begin
         writeln('ГђГіГ±Г±ГЄГЁГ© ÿçûê: ');
          readln(rus);
         writeln('ГЊГ*ГІГҐГ¬Г*ГІГЁГЄГ*: ');
          readln(math);
         writeln('Ãåîìåòðèÿ: ');
          readln(geo);
         writeln('Г€Г*ôîðìГ*ГІГЁГЄГ*: ');
          readln(info);
         writeln('ÔèçêóëüòóðГ*: ');
              readln(fizra);
    end;
end;
 
procedure print_data(var a:Tocenka; var c:student);
var i,rus,math,geo,info,fizra:integer;
begin
 for i:= 1 to n do         {Äëÿ Г*Г*ãëÿäГ*îñòè âûâîäèì Г¤Г*Г*Г*ûå Г*Г* ГЅГЄГ°Г*Г*}
    with x[i] do
    begin
     writeln('Èìÿ: ',name:8,' Г”Г*ìèëèÿ: ',surname:10,' Ãîä: ',god:2,' ГЉГ«Г*Г±Г±: ',klass:1);
     writeln('ГђГіГ±Г±ГЄГЁГ© ÿçûê: ', rus);
     writeln('ГЊГ*ГІГҐГ¬Г*ГІГЁГЄГ*: ', math);
     writeln('Ãåîìåòðèÿ: ', geo);
     writeln('Г€Г*ôîðìГ*ГІГЁГЄГ*: ', info);
     writeln('ÔèçêóëüòóðГ*: ', fizra);
    end;
end;
 
begin
 setconsolecp(1251);
 setconsoleoutputcp(1251);      {Âêëþ÷Г*ГҐГ¬ ðóññêèé ÿçûê}
 writeln('Ââåäèòå êîëè÷åñòâî ГіГ·ГҐГ*èêîâ');
  readln(n);
 
 for i:= 1 to n do              {Ââîäèì Г¤Г*Г*Г*ûå îá ГіГ·ГҐГ*ГЁГЄГ*Гµ}
    with x[i] do
    begin
         writeln('Ââåäèòå èìÿ: ');
          readln(name);
         writeln('Ââåäèòå ГґГ*ìèëèþ: ');
          readln(surname);
         writeln('Ââåäèòå ãîä îáó÷åГ*ГЁГї: ');
          readln(god);
         writeln('Ââåäèòå ГЄГ«Г*Г±Г±: ');
          readln(klass);
    end;
 writeln ('ÎöåГ*ГЄГЁ Г§Г* ÷åòâåðòü: ');
 for j:=1 to n do write_ocenki(b);
 writeln(' ');
 
print_data(b,d);
 
 for i:= 1 to n do
    begin
         if x[i].god=8      {Ïîäñ÷èòûâГ*ГҐГ¬ êîëè÷åñòâî ГіГ·Г*ùèõñÿ Гў 8-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
          then inc(god8);
 
         if x[i].god=10
          then inc(god10);   {Ïîäñ÷èòûâГ*ГҐГ¬ êîëè÷åñòâî ГіГ·Г*ùèõñÿ Гў 10-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
    end;
  if god8>god10
     then writeln('Áîëüøå Г*Г* ',god8-god10);
  if god8<god10
     then writeln('ГЊГҐГ*ГјГёГҐ Г*Г* ',god10-god8);
  if god8=god10
     then writeln('ÎäèГ*Г*êîâîå êîëè÷åñòâî ГіГ·ГҐГ*èêîâ');
 readln;
end.
0
Одиночка
3927 / 1852 / 88
Регистрация: 16.03.2012
Сообщений: 3,869
28.05.2012, 18:53 #9
Строку 30 пиши:
Delphi
1
    x: array of student;
Строку 74 замени на:
Delphi
1
2
3
4
  If n<1 Then Exit;
  SetLength(x,n);
 
  For i:=0 To n-1 Do
И в общем-то все циклы, где есть от 1 до n - заменить от 0 до n-1.

А в конце вставь строку:
Delphi
1
  Finalize(x);
0
Skyes
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 39
28.05.2012, 19:08  [ТС] #10
Цитата Сообщение от Одиночка Посмотреть сообщение
Строку 30 пиши:
Delphi
1
    x: array of student;
Строку 74 замени на:
Delphi
1
2
3
4
  If n<1 Then Exit;
  SetLength(x,n);
 
  For i:=0 To n-1 Do
И в общем-то все циклы, где есть от 1 до n - заменить от 0 до n-1.

А в конце вставь строку:
Delphi
1
  Finalize(x);
Сделал как вы сказали:
Но есть проблема, выкладываю скриншот:
Как видите в оценку по каждому предмету почему-то записывается несколько цифр, вместо одной... Где-то ошибка в циклах мне кажется...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
program str129n24e11;
{ÑâåäåГ*ГЁГї îá ГіГ·ГҐГ*ГЁГЄГҐ ñîñòîÿò ГЁГ§ ГҐГЈГ® èìåГ*ГЁ ГЁ ГґГ*ìèëèè, Г*Г*çâГ*Г*ГЁГї ГЄГ«Г*Г±Г±Г* (ãîäГ*
îáó÷åГ*ГЁГї ГЁ ГЎГіГЄГўГ»), Гў êîòîðîì Г®Г* ГіГ·ГЁГІГ±Гї, îöåГ*îê, ïîëó÷åГ*Г*ûõ ГіГ·ГҐГ*èêîì Г§Г*
ïîñëåäГ*ГѕГѕ ÷åòâåðòü. ГЏГіГ±ГІГј Г¤Г*Г* Г¬Г*Г±Г±ГЁГў, ñîäåðæГ*Г№ГЁГ© ñâåäåГ*ГЁГї îá ГіГ·ГҐГ*ГЁГЄГ*Гµ
øêîëû:
e) âûÿñГ*ГЁГІГҐ, Г*Г* ñêîëüêî ÷åëîâåê Гў âîñüìûõ ГЄГ«Г*Г±Г±Г*Гµ áîëüøå, Г·ГҐГ¬ Гў äåñÿòûõ;}
 
{$APPTYPE CONSOLE}
 
uses
 Windows,
 SysUtils;
 
const
 maxn = 5;  {ГЊГ*ГЄГ± êîë-ГўГ® îöåГ*îê îäГ*îãî ГіГ·ГҐГ*ГЁГЄГ*}
 
Type Tocenka = array [1..maxn] of integer; { ГІГЁГЇ Г¬Г*Г±Г±ГЁГў îöåГ*îê îäГ*îãî ГіГ·ГҐГ*ГЁГЄГ*}
     student = record
      name: string;             {Èìÿ}
      surname: string;          {Г”Г*ìèëèÿ}
      god: integer;             {Ãîä îáó÷åГ*ГЁГї, ГІГ® ГҐГ±ГІГј Г*Г»Г*ГҐГёГ*ГЁГ© ГЄГ«Г*Г±Г±}
      klass: char;               {ËèòåðГ* ГЄГ«Г*Г±Г±Г*}
      chetvert: Tocenka;         {ÎöåГ*ГЄГЁ Г§Г* ïîñëåäГ*ГѕГѕ ÷åòâåðòü}
      end;
 
 
Var i,j,n: integer;
    b:Tocenka;
    d:student;
    x: array of student;
    god8: integer;              {Êîëè÷åñтГўГ® ГіГ·Г*ùèõñÿ Гў 8-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
    god10: integer;             {Êîëè÷åñтГўГ® ГіГ·Г*ùèõñÿ Гў 10-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
 
procedure write_ocenki(var a:Tocenka);
var i,rus,math,geo,info,fizra:integer;
begin
 for i:=0 to n-1 do              {Ââîäèì Г¤Г*Г*Г*ûå îá îöåГ*ГЄГ*Гµ ГіГ·ГҐГ*ГЁГЄГ*}
    with x[i] do
    begin
         writeln('ГђГіГ±Г±ГЄГЁГ© ÿçûê: ');
          readln(rus);
         writeln('ГЊГ*ГІГҐГ¬Г*ГІГЁГЄГ*: ');
          readln(math);
         writeln('Ãåîìåòðèÿ: ');
          readln(geo);
         writeln('Г€Г*ôîðìГ*ГІГЁГЄГ*: ');
          readln(info);
         writeln('ÔèçêóëüòóðГ*: ');
              readln(fizra);
    end;
end;
 
procedure print_data(var a:Tocenka; var c:student);
var i,rus,math,geo,info,fizra:integer;
begin
 for i:=0 to n-1 do         {Äëÿ Г*Г*ãëÿäГ*îñòè âûâîäèì Г¤Г*Г*Г*ûå Г*Г* ГЅГЄГ°Г*Г*}
    with x[i] do
    begin
     writeln('Èìÿ: ',name:8,' Г”Г*ìèëèÿ: ',surname:10,' Ãîä: ',god:2,' ГЉГ«Г*Г±Г±: ',klass:1);
     writeln('ГђГіГ±Г±ГЄГЁГ© ÿçûê: ', rus);
     writeln('ГЊГ*ГІГҐГ¬Г*ГІГЁГЄГ*: ', math);
     writeln('Ãåîìåòðèÿ: ', geo);
     writeln('Г€Г*ôîðìГ*ГІГЁГЄГ*: ', info);
     writeln('ÔèçêóëüòóðГ*: ', fizra);
    end;
end;
 
begin
 setconsolecp(1251);
 setconsoleoutputcp(1251);      {Âêëþ÷Г*ГҐГ¬ ðóññêèé ÿçûê}
 writeln('Ââåäèòå êîëè÷åñòâî ГіГ·ГҐГ*èêîâ');
  readln(n);
 
 If n<1 Then Exit;              {Ââîäèì Г¤Г*Г*Г*ûå îá ГіГ·ГҐГ*ГЁГЄГ*Гµ}
 SetLength(x,n);
 for i:=0 to n-1 do
    with x[i] do
    begin
         writeln('Ââåäèòå èìÿ: ');
          readln(name);
         writeln('Ââåäèòå ГґГ*ìèëèþ: ');
          readln(surname);
         writeln('Ââåäèòå ãîä îáó÷åГ*ГЁГї: ');
          readln(god);
         writeln('Ââåäèòå ГЄГ«Г*Г±Г±: ');
          readln(klass);
    end;
 writeln ('ÎöåГ*ГЄГЁ Г§Г* ÷åòâåðòü: ');
 for j:=0 to n-1 do write_ocenki(b);
 writeln(' ');
 
print_data(b,d);
 
 for i:=0 to n-1 do
    begin
         if x[i].god=8      {Ïîäñ÷èòûâГ*ГҐГ¬ êîëè÷åñòâî ГіГ·Г*ùèõñÿ Гў 8-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
          then inc(god8);
 
         if x[i].god=10
          then inc(god10);   {Ïîäñ÷èòûâГ*ГҐГ¬ êîëè÷åñòâî ГіГ·Г*ùèõñÿ Гў 10-ûõ ГЄГ«Г*Г±Г±Г*Гµ}
    end;
  if god8>god10
     then writeln('Áîëüøå Г*Г* ',god8-god10);
  if god8<god10
     then writeln('ГЊГҐГ*ГјГёГҐ Г*Г* ',god10-god8);
  if god8=god10
     then writeln('ÎäèГ*Г*êîâîå êîëè÷åñòâî ГіГ·ГҐГ*èêîâ');
 readln;
 Finalize(x);
end.
0
Одиночка
3927 / 1852 / 88
Регистрация: 16.03.2012
Сообщений: 3,869
28.05.2012, 21:54 #11
Похоже ты её уже переделывал? Теперь нужно серьёзно смотреть. За полчаса-час сделаю. За пять минут не получается.

Добавлено через 2 часа 6 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
program Project2;
//program str129n24e11;
{Сведения об ученике состоят из его имени и фамилии, названия класса (года
обучения и буквы), в котором он учится, оценок, полученных учеником за
последнюю четверть. Пусть дан массив, содержащий сведения об учениках
школы:
e) выясните, на сколько человек в восьмых классах больше, чем в десятых;}
 
{$APPTYPE CONSOLE}
 
uses
  Windows,
  SysUtils;
 
const
 maxn = 5;  {Макс кол-во оценок одного ученика}
 
Type
     student = record
      name: string;             {Имя}
      surname: string;          {Фамилия}
      god: integer;             {Год обучения, то есть нынешний класс}
      klass: char;               {Литера класса}
      //Оценки за четверть
      rus : integer;  //Русский язык
      math : integer; //Математика
      geo : integer; //Геометрия
      info : integer; //Информатика
      fizra : integer; //Физкультура
     end;
 
 
Var i,n: integer;
    x: array of student;
    god8: integer;              {Количество учащихся в 8-ых классах}
    god10: integer;             {Количество учащихся в 10-ых классах}
 
Procedure Read_Ocenka(Mess:String;Var x:Integer);
begin
  write(Mess);
  Repeat
    readln(x);
    If (x In [1..5]) Then Break;
    writeLn;
    writeLn('Оценка может быть от 1 до пяти !!!');
    writeLn;
    write(Mess);
  Until (x In [1..5]);
End;
 
Procedure Read_Ocenki(Var x:student);
begin
  {Вводим данные об оценках ученика}
  Read_Ocenka('Русский язык: ',x.rus);
  Read_Ocenka('Математика: ',x.math);
  Read_Ocenka('Геометрия: ',x.geo);
  Read_Ocenka('Информатика: ',x.info);
  Read_Ocenka('Физкультура: ',x.fizra);
end;
 
procedure print_data;
var i:integer;
begin
  writeln;
  writeln;
  for i:=0 to n-1 do         {Для наглядности выводим данные на экран}
  with x[i] do
  begin
    writeln('Имя: ',name:8,' Фамилия: ',surname:10,' Год: ',god:2,' Класс: ',klass:1);
    writeln('Русский язык: ', rus);
    writeln('Математика: ', math);
    writeln('Геометрия: ', geo);
    writeln('Информатика: ', info);
    writeln('Физкультура: ', fizra);
    writeln;
  end;
end;
 
begin
  setconsolecp(1251);
  setconsoleoutputcp(1251);      {Включаем русский язык}
  writeln('Введите количество учеников');
  readln(n);
 
  If n<1 Then Exit;              {Вводим данные об учениках}
  SetLength(x,n);
  for i:=0 to n-1 do
  with x[i] do
  begin
    writeln;
    write('Введите имя: '); readln(name);
    write('Введите фамилию: '); readln(surname);
    write('Введите год обучения: '); readln(god);
    write('Введите класс: '); readln(klass);
    write('Оценки за четверть: ');
    writeln;
    Read_ocenki(x[i]);
  end;
  writeln;
 
  print_data;
 
  god8:=0; god10:=0;
 
  for i:=0 to n-1 do
  begin
    if x[i].god=8      {Подсчитываем количество учащихся в 8-ых классах}
    then inc(god8);
 
    if x[i].god=10
    then inc(god10);   {Подсчитываем количество учащихся в 10-ых классах}
  end;
  if god8>god10
     then writeln('Учеников восьмых классов больше на ',god8-god10);
  if god8<god10
     then writeln('Учеников восьмых классов меньше на ',god10-god8);
  if god8=god10
     then writeln('Одинаковое количество учеников восьмых и десятых классов');
 readln;
 Finalize(x);
end.
1
Skyes
0 / 0 / 0
Регистрация: 08.10.2011
Сообщений: 39
29.05.2012, 01:15  [ТС] #12
Цитата Сообщение от Одиночка Посмотреть сообщение
Похоже ты её уже переделывал? Теперь нужно серьёзно смотреть. За полчаса-час сделаю. За пять минут не получается.

Добавлено через 2 часа 6 минут
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
program Project2;
//program str129n24e11;
{Сведения об ученике состоят из его имени и фамилии, названия класса (года
обучения и буквы), в котором он учится, оценок, полученных учеником за
последнюю четверть. Пусть дан массив, содержащий сведения об учениках
школы:
e) выясните, на сколько человек в восьмых классах больше, чем в десятых;}
 
{$APPTYPE CONSOLE}
 
uses
  Windows,
  SysUtils;
 
const
 maxn = 5;  {Макс кол-во оценок одного ученика}
 
Type
     student = record
      name: string;             {Имя}
      surname: string;          {Фамилия}
      god: integer;             {Год обучения, то есть нынешний класс}
      klass: char;               {Литера класса}
      //Оценки за четверть
      rus : integer;  //Русский язык
      math : integer; //Математика
      geo : integer; //Геометрия
      info : integer; //Информатика
      fizra : integer; //Физкультура
     end;
 
 
Var i,n: integer;
    x: array of student;
    god8: integer;              {Количество учащихся в 8-ых классах}
    god10: integer;             {Количество учащихся в 10-ых классах}
 
Procedure Read_Ocenka(Mess:String;Var x:Integer);
begin
  write(Mess);
  Repeat
    readln(x);
    If (x In [1..5]) Then Break;
    writeLn;
    writeLn('Оценка может быть от 1 до пяти !!!');
    writeLn;
    write(Mess);
  Until (x In [1..5]);
End;
 
Procedure Read_Ocenki(Var x:student);
begin
  {Вводим данные об оценках ученика}
  Read_Ocenka('Русский язык: ',x.rus);
  Read_Ocenka('Математика: ',x.math);
  Read_Ocenka('Геометрия: ',x.geo);
  Read_Ocenka('Информатика: ',x.info);
  Read_Ocenka('Физкультура: ',x.fizra);
end;
 
procedure print_data;
var i:integer;
begin
  writeln;
  writeln;
  for i:=0 to n-1 do         {Для наглядности выводим данные на экран}
  with x[i] do
  begin
    writeln('Имя: ',name:8,' Фамилия: ',surname:10,' Год: ',god:2,' Класс: ',klass:1);
    writeln('Русский язык: ', rus);
    writeln('Математика: ', math);
    writeln('Геометрия: ', geo);
    writeln('Информатика: ', info);
    writeln('Физкультура: ', fizra);
    writeln;
  end;
end;
 
begin
  setconsolecp(1251);
  setconsoleoutputcp(1251);      {Включаем русский язык}
  writeln('Введите количество учеников');
  readln(n);
 
  If n<1 Then Exit;              {Вводим данные об учениках}
  SetLength(x,n);
  for i:=0 to n-1 do
  with x[i] do
  begin
    writeln;
    write('Введите имя: '); readln(name);
    write('Введите фамилию: '); readln(surname);
    write('Введите год обучения: '); readln(god);
    write('Введите класс: '); readln(klass);
    write('Оценки за четверть: ');
    writeln;
    Read_ocenki(x[i]);
  end;
  writeln;
 
  print_data;
 
  god8:=0; god10:=0;
 
  for i:=0 to n-1 do
  begin
    if x[i].god=8      {Подсчитываем количество учащихся в 8-ых классах}
    then inc(god8);
 
    if x[i].god=10
    then inc(god10);   {Подсчитываем количество учащихся в 10-ых классах}
  end;
  if god8>god10
     then writeln('Учеников восьмых классов больше на ',god8-god10);
  if god8<god10
     then writeln('Учеников восьмых классов меньше на ',god10-god8);
  if god8=god10
     then writeln('Одинаковое количество учеников восьмых и десятых классов');
 readln;
 Finalize(x);
end.
А можно в 43 строке обойтись без Break? У нас такое не приветствуется...
0
Одиночка
3927 / 1852 / 88
Регистрация: 16.03.2012
Сообщений: 3,869
29.05.2012, 02:21 #13
Тогда можешь написать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
Procedure Read_Ocenka(Mess:String;Var x:Integer);
begin
  write(Mess);
  Repeat
    readln(x);
    If (x In [1..5]) Then Continue;
    writeLn;
    writeLn('Оценка может быть от 1 до пяти !!!');
    writeLn;
    write(Mess);
  Until (x In [1..5]);
End;
Continue - можно использовать?
А ещё так можно:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
Procedure Read_Ocenka(Mess:String;Var x:Integer);
begin
  write(Mess);
  readln(x);
  While Not (x In [1..5]) Do
  Begin
    writeLn;
    writeLn('Оценка может быть от 1 до пяти !!!');
    writeLn;
    write(Mess);
    readln(x);
  End;
End;
Или так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Procedure Read_Ocenka(Mess:String;Var x:Integer);
begin
  write(Mess);
  Repeat
    readln(x);
    If Not (x In [1..5]) Then
    Begin
      writeLn;
      writeLn('Оценка может быть от 1 до пяти !!!');
      writeLn;
      write(Mess);
    End;
  Until (x In [1..5]);
End;
1
Одиночка
3927 / 1852 / 88
Регистрация: 16.03.2012
Сообщений: 3,869
31.05.2012, 17:19 #14
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
program str129n24e11;
{Сведения об ученике состоят из его имени и фамилии, названия класса (года
обучения и буквы), в котором он учится, оценок, полученных учеником за
последнюю четверть. Пусть дан массив, содержащий сведения об учениках
школы:
e) выясните, на сколько человек в восьмых классах больше, чем в десятых;}
 
{$APPTYPE CONSOLE}
 
uses
  Windows,
  SysUtils;
 
const
 maxn = 5;  {Макс кол-во оценок одного ученика}
 
Type
     TSubject = (rus, math, geo, info, fizra); //перечислимый тип всех предметов
     TMark = array [TSubject] of integer;
 
     TStudent = record
      name: string;             {Имя}
      surname: string;          {Фамилия}
      god: integer;             {Год обучения, то есть нынешний класс}
      klass: char;              {Литера класса}
      marks : TMark            {Оценки за четверть}
     end;
 
     TStudents = array of TStudent;
 
const
  NameSubject : array [TSubject] of string =
  ('Русский язык', 'Математика', 'Геометрия', 'Информатика', 'Физкультура');
 
Var n: integer;
    x: TStudents;
    god8: integer;              {Количество учащихся в 8-ых классах}
    god10: integer;             {Количество учащихся в 10-ых классах}
 
Procedure Read_Ocenka(Mess:String;Var x:Integer);
begin
  write(Mess:12,': ');
  readln(x);
  While Not (x In [1..5]) Do
  Begin
    writeLn;
    writeLn('Оценка может быть от 1 до пяти !!!');
    writeLn;
    write(Mess:12,': ');
    readln(x);
  End;
End;
 
Procedure Read_Ocenki(Var x:TMark);
Var
  i : TSubject;
begin
  {Вводим данные об оценках ученика}
  For i:=Low(i) To High(i) Do
  Read_Ocenka(NameSubject[i],x[i]);
end;
 
procedure PrintStudent(s : TStudent);
Var
  i : TSubject;
begin
  with s do
  begin
    writeln('Имя: ',name:8,' Фамилия: ',surname:10,' Год: ',god:2,' Класс: ',klass:1);
    For i:=Low(i) To High(i) Do writeln(NameSubject[i]:12,': ',marks[i]);
    writeln;
  end;
end;
 
procedure print_data(Var x : TStudents);
var i:integer;
begin
  writeln;
  for i:=Low(x) to High(x) do {Для наглядности выводим данные на экран}
  PrintStudent(x[i]);
end;
 
procedure ReadStudent(Var x : TStudent);
Begin
  with x do
  begin
    writeln;
    write('Введите имя: '); readln(name);
    write('Введите фамилию: '); readln(surname);
    write('Введите год обучения: '); readln(god);
    write('Введите класс: '); readln(klass);
    write('Оценки за четверть: ');
    writeln;
    Read_ocenki(marks);
  end;
End;
 
procedure read_data (var x : TStudents);
var i:integer;
begin
  writeln;
  writeln;
  for i:=0 to n-1 do         {Для наглядности выводим данные на экран}
  ReadStudent(x[i]);
end;
 
procedure Calculate (Var x : TStudents; var god8, god10 : integer);
var i : integer;
begin
  god8:=0; god10:=0;
 
  for i:=Low(x) to High(x) do
  if x[i].god=8      {Подсчитываем количество учащихся в 8-ых классах}
  then inc(god8) Else
  if x[i].god=10
  then inc(god10);   {Подсчитываем количество учащихся в 10-ых классах}
end;
 
begin
  {Включаем русский язык}
  setconsolecp(1251);
  setconsoleoutputcp(1251);      {Включаем русский язык}
 
  repeat
    write('Введите количество учеников: ');  {Вводим данные об учениках}
    readln(n);
  until n>1;
  SetLength(x,n);
  Read_data(x);
 
  {Печатаем }
  print_data(x);
 
  {Считаем}
  Calculate(x, god8, god10);
 
  if god8>god10
     then writeln('Учеников восьмых классов больше на ',god8-god10);
  if god8<god10
     then writeln('Учеников восьмых классов меньше на ',god10-god8);
  if god8=god10
     then writeln('Одинаковое количество учеников восьмых и десятых классов');
  readln;
  Finalize(x);
end.
1
31.05.2012, 17:19
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.05.2012, 17:19
Привет! Вот еще темы с ответами:

Проверьте задачу - Pascal ABC
program P355; type Mas= array of integer; var a,b,Mas:integer; Procedure Vvod ( var D:a; var M:integer); begin readln(n); ...

проверьте задачу - C++
проверьте пожалуйста мое решение вот условие: Три фрагмента нижеприведенной программы, выделенные жирным курсивом, представляют собой...

проверьте задачу - Квантовая и атомная физика
Добрый вечер всем.Помогите с задачей пожалуйста. Электрон находится в прямоугольном потенциальном ящике с непроницаемыми стенками.Ширина...

Проверьте задачу на си - C (СИ)
Нужно решить данную задачку. Вроде код написал, но не уверен в правильности. Проверьте пожалуйста. П.5.18. Правил Запрещено размещать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru