Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83

Найти самого старого мужчину и самую молодую женщину в списке группы

12.09.2015, 20:03. Показов 3916. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, дали условие

"Дан список группы в 10 человек в виде ФАМИЛИЯ ГОД_РОЖД. ПОЛ 15 симв. 4 симв. 1 симв. Иванов 1985 М Петрова 1983 Ж …………………… Найти самого старого мужчину и самую молодую женщину и вывести соответствующие строки."

по нему нужно написать программу, примерный код я написал но очень плохо владею языком(работаю на этим),

Pascal
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
program Ex1_v1;
 
var
  f: text;
  mass: array[1..10, 1..22] of char;
  i, j: integer;
  b: char;
 
begin
  assign(f, 'SPISOK.txt');
  reset(f);
  for i := 1 to 10 do
  begin
    for j := 1 to 22 do
    begin
      read(f, mass[i, j]);
    end;
    readln(f);
  end;
  close(f);
  assign(f, 'res.txt');
  rewrite(f);
  for i := 1 to 10 do
  begin
    for j := 1 to 22 do
    begin
      write(f, mass[i, j]);
      write(mass[i, j]);
    end;
    writeln(f); writeln;
  end;
  writeln(f);
  close(f);
  
  
  
  begin{--------------------------------------------------------------->(самый старый мужчина)}
    for 
    i := 1 to 10 do 
    begin
      for j := 1 to 22 do 
      begin
        if mass[1, 17] = 'm' then begin
          b := mass[i, 22];
          if b < mass[i + 1, 22] then b := mass[i + 1, 22] else mass[i, 22] := mass[i + 1, 22]; 
        end;
      end;
    end;
    writeln();
  end;
  
  begin{-------------------------------------------------------------->(самая молодая женщина)}
    for 
    i := 1 to 10 do 
    begin
      for j := 1 to 22 do 
      begin
        if mass[1, 17] = 'g' then begin
          b := mass[i, 22];
          if b > mass[i + 1, 22] then b := mass[i + 1, 22] else mass[i, 22] := mass[i + 1, 22]; 
        end;
      end;
    end;
    writeln();
  end;
  
  
  close(f);
end.
Что и как быть дальше не знаю...
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.09.2015, 20:03
Ответы с готовыми решениями:

С++ Программа на Одномерный массив (определить самого высокого мужчину и женщину)
Дано 9 имен. Массивы пол(муж, жен) и рост(150-200). С помощью массивов пол и рост определить самого высокого мужчину и женщину, а также...

Найти самого старшего мужчину в группе
Помогите решить лабу. type строка=array of char; дата=record число:1..31; месяц:1..12; ...

Найти самого старшего мужчину в группе
Помогите сделать!!! Используя следующий фрагмент программы, опишите перечисленные ниже процедуры: Type data = record ...

23
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
12.09.2015, 21:05
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Dassis Посмотреть сообщение
Дан список группы в 10 человек в виде ФАМИЛИЯ ГОД_РОЖД. ПОЛ 15 симв. 4 симв. 1 симв. Иванов 1985 М Петрова 1983 Ж ……………………
Это нужно объявить тип запись
Pascal
1
2
3
4
5
type person=record
                  fam:string[15];
                  grz:integer;
                  pol:char;
                  end;
Объявить массив записей
Pascal
1
2
const n=10;
var a:array[1..n] of person;
И с этим массивом работать.
Почитайте про массивы записей, посмотрите похожие темы на форуме.

Добавлено через 9 минут
Как читать записи из файла
Пусть они записаны в файле построчно, в таком виде
Иванов 1985 М
Pascal
1
2
3
4
5
6
7
8
9
for i:=1 to n do
 begin
   readln(f,s);//читаем строку
   a[i].fam:=copy(s,1,pos(' ',s)-1);
   delete(s,1,pos(' ',s));
   a[i].grz:=strtoint(copy(s,1,pos(' ',s)-1));
   delete(s,1,pos(' ',s));
   a[i].pol:=s;
 end;
Добавлено через 10 минут
Цитата Сообщение от Dassis Посмотреть сообщение
Найти самого старого мужчину и самую молодую женщину и вывести соответствующие строки.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
m:=0;
z=:0;
min:=0;
max:=3000;
for i:=1 to n do
 begin
  if (a[i].pol='М') and(a[i].grz<max) then
  begin
   max:=a[i].grz;
   m:=i;
  end;
 if (a[i].pol='Ж')and(a[i].grz>min) then
  begin
   min:=a[i].grz;
   z:=i;
  end;
 end;
if m=0 then writeln('В списке нет мужчин')
else writeln('Самый старый мужчина: ',a[i].fam,' ',a[i].grz);
if z=0 then writeln('В списке нет женщин')
elsewriteln('Самая молодая женщина: ',a[z].fam,' ',a[z].grz);
Добавлено через 14 минут
Если файл записан так
Иванов 1952 М
Петрова 1983 Ж
15 символов+пробел, 4 символа+пробел, 1 символ
то читать так
Pascal
1
2
3
4
5
6
7
for i:=1 to n do
 begin
   readln(f,s);//читаем строку
   a[i].fam:=copy(s,1,15);
   a[i].grz:=strtoint(copy(s,17,4);
   a[i].pol:=s[22];
 end;
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
13.09.2015, 18:38  [ТС]
Pascal
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
program Ex1_v1;
 
type
  person = record
    fam: string;
    grz: integer;
    pol: char;
  end;
 
const
  n = 10;
 
var
  a: array[1..n] of person;
  f: text;
  mass: array[1..10, 1..22] of char;
  i, j, m, z, min, max: integer;
  s: string;
  b: char;
 
begin
  assign(f, 'SPISOK.txt');
  reset(f);
  for i := 1 to 10 do
  begin
    for j := 1 to 22 do
    begin
      read(f, mass[i, j]);
    end;
    readln(f);
  end;
  close(f);
  assign(f, 'res.txt');
  rewrite(f);
  for i := 1 to 10 do
  begin
    for j := 1 to 22 do
    begin
      write(f, mass[i, j]);
      write(mass[i, j]);
    end;
    writeln(f); writeln;
  end;
  writeln(f);
  close(f);
  
  for i := 1 to n do
  begin
    reset(f);
    readln(f, s);//читаем строку
    a[i].fam := copy(s, 1, 15);
    a[i].grz := strtoint(copy(s, 17, 4));//входная строка имела неверный формат. 
    a[i].pol := s[22];
  end; 
  m := 0;
  z := 0;
  min := 0;
  max := 3000;
  for i := 1 to n do
  begin
    if (a[i].pol = 'М') and (a[i].grz < max) then
    begin
      max := a[i].grz;
      m := i;
    end;
    if (a[i].pol = 'Ж') and (a[i].grz > min) then
    begin
      min := a[i].grz;
      z := i;
    end;
  end;
  if m = 0 then writeln('В списке нет мужчин')
  else writeln('Самый старый мужчина: ', a[i].fam, ' ', a[i].grz);
  if z = 0 then writeln('В списке нет женщин')
  else writeln('Самая молодая женщина: ', a[z].fam, ' ', a[z].grz);
  close(f);
end.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
13.09.2015, 18:48
Цитата Сообщение от Dassis Посмотреть сообщение
//входная строка имела неверный формат.
Строка должна иметь вид
Фамилия, пробелы до 15-длина фамилии+1, год, пробел, пол
Code
1
Иванов          1990 М
Вводите в файл внимательно.

Добавлено через 1 минуту
Или плюньте и возьмите первый вариант, с одним пробелом между фамилией и годом.
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
13.09.2015, 20:15  [ТС]
список:

Иванов 1985 М
Петрова 1983 Ж
Оситцин 1981 М
Ким 1979 Ж
Лукин 1977 М
Иванова 1975 Ж
Исоев 1973 М
Лобачева 1971 Ж
Икушин 1969 М
Трубачева 1967 Ж

на выходе получается:
Самый старый мужчина: Трубачева 967
Самая молодая женщина: Петрова 983
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
13.09.2015, 20:26
Ты вообще чуть думаешь? Читаешь что я тебе пишу?
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
13.09.2015, 20:28  [ТС]
Puporev, большое спасибо, все работает)
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
13.09.2015, 20:29
Добавь один пробел между фамилией и годом. Должгл быть 15 символов под фамилию и 1 пробел, всего 16 символов, например
Абракадаброввва 1990
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
13.09.2015, 20:32  [ТС]
нашел ошибку (в пробелах)

Добавлено через 29 секунд
Большое спасибо
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
17.09.2015, 22:44  [ТС]
условие тоже что и выше, но список выглядит вот-так:
Ivanov 1985 M
Petrova 1983 G
Osicin 1981 M
Kim 1979 G
Lukin 1977 M
Ivanova 1975 G
Isoev 1973 M
Lobacheva 1971 G
Ikushin 1969 M
Trubasheva 1967 G

а код программы:
Pascal
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
program Ex1_v1;
 
var
  f: text;
  mass: array[1..10, 1..22] of char;
  i, j: integer;
  max, max1, max2, max3, u, u1, u2, u3, x, x1, x2, x3: integer;
  min, min1, min2, min3, l, l1, l2, l3, y, y1, y2, y3: integer;
 
begin
  assign(f, 'SPISOK.txt');
  reset(f);
  for i := 1 to 10 do
  begin
    for j := 1 to 22 do
    begin
      read(f, mass[i, j]);
    end;
    readln(f);
  end;
  close(f);
  assign(f, 'res.txt');
  rewrite(f);
  for i := 1 to 10 do
  begin
    for j := 1 to 22 do
    begin
      write(f, mass[i, j]);
      write(mass[i, j]);
    end;
    writeln(f);writeln;
  end;
  
  writeln(f);
  begin
    for i := 1 to 9 do
      for j := 1 to 1 do
        if mass[i, 22] = 'M' then begin
          u := ord(mass[1, 17]);u1 := ord(mass[1, 18]);u2 := ord(mass[1, 19]);u3 := ord(mass[1, 20]);
          x := ord(mass[i + 1, 17]);x1 := ord(mass[i + 1, 18]);x2 := ord(mass[i + 1, 19]);x3 := ord(mass[i + 1, 20]);
          if u < x then x := max else u := x;
          if u1 > x1 then max1 := x1 else u1 := x1;
          if u2 > x2 then max2 := x2 else u2 := x2;
          if u3 > x3 then max3 := x3 else u3 := x3;
        end;
    writeln(chr(max),chr(max1),chr(max2),chr(max3));
  end;
  
  begin
    for i := 1 to 9 do
      for j := 1 to 1 do
        if mass[i, 22] = 'G' then begin
          l := ord(mass[1, 17]);l1 := ord(mass[1, 18]);l2 := ord(mass[1, 19]);l3 := ord(mass[1, 20]);
          y := ord(mass[i+1, 17]);y1 := ord(mass[i + 1, 18]);y2 := ord(mass[i + 1, 19]);y3 := ord(mass[i + 1, 20]);
          if l > y then min := y else l := y;
          if l1 > y1 then min1 := y1 else l1 := y1;
          if l2 > y2 then min2 := y2 else l2 := y2;
          if l3 > y3 then min3 := y3 else l3 := y3;
        end;
    writeln(chr(min),chr(min1),chr(min2),chr(min3));
  end;
  close(f);
end.
можно использовать только двумерных символьных массивов, текстовых файлов и без процедур.
Что мог я написал, хз что делать дальше....
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
18.09.2015, 09:22
Начнем с того что входной файл у тебя опять через одно место написан. Неужели трудно посчитать символы в первой строке и сравнить с ней другие строки?
Файл
Code
1
2
3
4
5
6
7
8
9
10
Ivanov          1985 M
Petrova         1983 G
Osicin          1981 M
Kim             1979 G
Lukin           1977 M
Ivanova         1975 G
Isoev           1973 M
Lobacheva       1971 G
Ikushin         1969 M
Trubasheva      1967 G
Код
Pascal
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
const n=10;
      m=22;
var f: text;
    mass:array[1..n,1..m] of char;
    c:char;
    s:string;
    i,j,g,mz,gn,max,min: integer;
begin
assign(f,'SPISOK.txt');
reset(f);
i:=1;
j:=1;
while not eof(f) do
 begin
  read(f,c);
  if not(c in [#13,#10]) then
   begin
    mass[i,j]:=c;
    j:=j+1;
    if (j-1) mod m=0 then //конец строки матрицы
     begin
      i:=i+1;
      j:=1;
     end;
   end;
 end;
close(f);
mz:=0;//есть ли мужчины
gn:=0;//есть ли женщины
min:=0;//мин. год рождения мужчины
max:=3000;//макс. год рождения женщины
for i:=1 to n do
 begin
  g:=0;//посчитаем год
  for j:=17 to 20 do
  g:=g*10+strtoint(mass[i,j]);
  if (mass[i,m]='M') and(g<max) then
   begin
    max:=g;
    mz:=i;
   end;
  if (mass[i,m]='G')and(g>min) then
   begin
    min:=g;
    gn:=i;
  end;
 end;
assign(f,'res.txt');
rewrite(f);
if mz=0 then writeln(f,'В списке нет мужчин')
else writeln(f,'Самый старый мужчина: ');
for i:=1 to m do
write(f,mass[mz,i]);
writeln(f,'');
if gn=0 then writeln(f,'В списке нет женщин')
else writeln(f,'Самая молодая женщина:');
for i:=1 to m do
write(f,mass[gn,i]);
close(f);
writeln('Результат записан в файл res.txt');
end.
Выходной файл
Code
1
2
3
4
Самый старый мужчина: 
Ikushin         1969 M
Самая молодая женщина:
Petrova         1983 G
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
19.09.2015, 20:25  [ТС]
А если массив будет не char а string то несоответствие g:=g*10+(mass[i,j]); что делать в этом случае?
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.09.2015, 20:38
Цитата Сообщение от Dassis Посмотреть сообщение
А если массив будет не char а string
Да зачем, если в условии символы? Как работать со строками, я уже писал выше, нормальный вариант для такого типа задач это записи+строки, это Вы придумали двухмерный массив символов.
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
20.09.2015, 11:54  [ТС]
ок, спс.

Добавлено через 15 часов 7 минут
нужно без записей, а выходит когда я меняю char на string несоответствие string и integer
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.09.2015, 12:07
Так нужно массив
Pascal
1
array[1..n,1..m] of char;
или нет?

Добавлено через 54 секунды
Ты вообще можешь толком написать условие или так и будешь сопли жевать?
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
20.09.2015, 12:07  [ТС]
array[1..n, 1..m] of string;
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.09.2015, 12:08
Не пиши ерунду, нафига тебе двумерный массив строк?
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
20.09.2015, 12:10  [ТС]
1.Двумерных символьных массивов, текстовых файлов и без процедур; 2.С массивами STRING, процедурами и текстовыми файлами; 3.С массивами RECORD, процедурами, текстовыми и типизированными файлами и процедурами. Типизированный файл формируется в этой же программе из текстового , а затем из него происходит чтение . 4.С модулями (варианты 2или 3 переделываются на модульный); 5.С однонаправленными линейными списками (каждая строка исходного текстового файла рассматривается как элемент списка), процедурами и текстовыми файлами; 6.С рекурсией (любой из вариантов 2-4 переделывается на рекурсивный, поскольку везде в них есть циклы , которые можно всегда выполнить как рекурсивные процедуры).дурами и текстовыми файлами
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
20.09.2015, 12:11
Ну так бы и писал что нужно 6 разных задач. Это я тебе не нанимался, чао.
0
 Аватар для Dassis
0 / 0 / 1
Регистрация: 11.09.2015
Сообщений: 83
20.09.2015, 12:12  [ТС]
2.С массивами STRING, процедурами и текстовыми файлами;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
20.09.2015, 12:12
Помогаю со студенческими работами здесь

Структуры. Найти самого старшего мужчину
Используя записи с полями: дата - с полями число, месяц, год; анкета - с полями фамилия, пол, дата рождения в массиве из 15 элементов типа...

Структура: Найти самую молодую команду среди учасников турнира.
Здравствуйте, помогите пожалуйста решить задачу Есть запись с такой структурой: type Tsportsman = record team:...

Структура содержит информацию о спортивной команде. Найти самую молодую команду
Здравствуйте!Помогите решить задачу. Задание: Информация об участниках спортивных соревнований содержит наименование страны, название...

Найти фамилии владельцев, номера и марки самого старого и самого нового автомобилей
Сведения об автомобиле состоят из его марки, номера, года выпуска и фамилии владельца. Найти а. Фамилии владельцев заданной марки б....

Задачка не может вычислить самую молодую команды
Программа считает средний возраст игроков, но вот с выводом самой молодой команды не получается. Помогите найти в чем ошибка?пожалуйста) ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru