var
i, j: word;
students: array[1..n] of student; // student это запись хранящая инфу о студенте
..................................
for i:=1 to n do
for j:=i+1 to n do
if (students.sport = students[j].sport) and (students.sex <> students[j].sex) then
begin
// твои действия
end;
Записи в Pascal
Составить программу, которая вводит данные о студентах:
№ п/п, фамилию, год рождения, пол, курс, вид спорта и выводит вид спорта, в котором занимаются и девушки и юноши.
Часть задачи я сделал, а именно саму таблицу и ввод, а вот найти вид спорта не могу. :confused:
В 7 сообщении исходник.
Напиши понятнее, что ты сделал, и что нужно сделать.
--------------------------------------------------------------
|№п/п |Фамилия |Год рожд.|Пол| Курс | Вид спорта|
---------------------------------------------------------------
|1____|Жадаев__|1990____|__м |___3_|бокс _____|
Ну вот это таблица и ввод. Я ввел данные и теперь мне нужно с ними работать. Мое задание: найти вид спорта в котором занимаются и девушки и юноши, т.е. и муж и жен пол.
Код:
рекомендую сделать так чтобы один и тот же вид спорта не выводился несколько раз, а так будет если будешь пользоваться приведенной схемой, но это уже другой вопрос.
Код:
type
student=record
...
...
male:boolean;
sport:string;
end;
var
students:array[1..100] of student;
size:integer;
function findSport:string;
var a:integer;
begin
for a:=1 to size do if students[a].male then
begin
for b:=1 to size do if not(students.male) and (students[a].sport=students.sport) then
begin
findSport:=students[a].sport;
exit;
end;
end;
findSport:='not found';
end;
student=record
...
...
male:boolean;
sport:string;
end;
var
students:array[1..100] of student;
size:integer;
function findSport:string;
var a:integer;
begin
for a:=1 to size do if students[a].male then
begin
for b:=1 to size do if not(students.male) and (students[a].sport=students.sport) then
begin
findSport:=students[a].sport;
exit;
end;
end;
findSport:='not found';
end;
Или тебе не подходит решение за квадратное время?
Код:
type
rec=record
{ Я оставил только необходимые поля }
sport:string; { Вид спорта }
sx: char; { пол [м, ж] }
end;
srec=record
name:string; { Название }
msx:boolean; { Флаг присутствия как парней, так и девушек }
end;
const
count=10;
var
table:array [1..count] of rec; { Таблица с записями }
tcount:integer; { колво записей в таблице }
slist:array [1..count] of srec;{ список видов спорта }
scount:integer; { Количество видов спорта }
procedure FindSports;
function IsMsxSport(indx:integer):boolean;
var
i:integer;
m,f:boolean;
begin
i:=1;
m:=false;
f:=false;
while (i<=tcount) and ((m = false) or (f = false)) do begin
if table.sport = slist[indx].name then begin
if table.sx = 'м' then
m:=true;
if table.sx = 'ж' then
f:=true;
end;
inc(i);
end;
IsMsxSport:=(m and f);
end;
procedure FillSportList;
var
i,j:integer;
found:boolean;
begin
scount:=0;
for i:=1 to tcount do begin
found:=false;
j:=1;
while (j<=scount) and (found=false) do begin
if table.sport = slist[j].name then
found:=true;
inc(j);
end;
if found = false then begin
inc(scount);
slist[scount].name:=table.sport;
slist[scount].msx:=IsMsxSport(scount);
end;
end;
end;
var
indx:integer;
begin
FillSportList;
indx:=1;
while indx<=scount do begin
if slist[indx].msx then
WriteLn(slist[indx].name);
inc(i);
end;
end;
rec=record
{ Я оставил только необходимые поля }
sport:string; { Вид спорта }
sx: char; { пол [м, ж] }
end;
srec=record
name:string; { Название }
msx:boolean; { Флаг присутствия как парней, так и девушек }
end;
const
count=10;
var
table:array [1..count] of rec; { Таблица с записями }
tcount:integer; { колво записей в таблице }
slist:array [1..count] of srec;{ список видов спорта }
scount:integer; { Количество видов спорта }
procedure FindSports;
function IsMsxSport(indx:integer):boolean;
var
i:integer;
m,f:boolean;
begin
i:=1;
m:=false;
f:=false;
while (i<=tcount) and ((m = false) or (f = false)) do begin
if table.sport = slist[indx].name then begin
if table.sx = 'м' then
m:=true;
if table.sx = 'ж' then
f:=true;
end;
inc(i);
end;
IsMsxSport:=(m and f);
end;
procedure FillSportList;
var
i,j:integer;
found:boolean;
begin
scount:=0;
for i:=1 to tcount do begin
found:=false;
j:=1;
while (j<=scount) and (found=false) do begin
if table.sport = slist[j].name then
found:=true;
inc(j);
end;
if found = false then begin
inc(scount);
slist[scount].name:=table.sport;
slist[scount].msx:=IsMsxSport(scount);
end;
end;
end;
var
indx:integer;
begin
FillSportList;
indx:=1;
while indx<=scount do begin
if slist[indx].msx then
WriteLn(slist[indx].name);
inc(i);
end;
end;
Тормознутый способ, но по идее должен выводить список ВСЕХ видов спорта, в которых есть как и парни так и девушки
P.S.: Возможны ошибки, не проверял
Код:
program Zapisi;
uses crt;
type student=record
Surname,Vid_sporta:string[20];
God_rozhdeniya:word;
Pol:char;
Kurs,Nom_p_p:Byte;
end;
var
Gruppa:array [1..3] of student;
i,y:integer;
begin
clrscr;
writeln('Заполните таблицу');
Writeln('╔════╦═════════════╦═════════╦═══╦════╦════════════╗');
Writeln('║№п/п║ Фамилия ║Год рожд.║Пол║Курс║ Вид спорта ║');
Writeln('╠════╬═════════════╬═════════╬═══╬════╬════════════╣');
y:=0;
for i:=1 to 3 do with Gruppa do
begin
Writeln('║');
gotoxy(3,5+y);
readln(Nom_p_p);
gotoxy(6,5+y);
Write('║');
readln(Surname);
gotoxy(20,5+y);
Write('║');
readln(God_rozhdeniya);
gotoxy(30,5+y);
Write('║');
readln(Pol);
gotoxy(34,5+y);
Write('║');
readln(Kurs);
gotoxy(39,5+y);
Write('║');
readln(Vid_sporta);
gotoxy(52,5+y);
writeln('║');
y:=y+2;
if i<3 then
Writeln('╠════╬═════════════╬═════════╬═══╬════╬════════════╣');
if i>=3 then
writeln('╚════╩═════════════╩═════════╩═══╩════╩════════════╝');
end;
{Вывод информации}
Writeln('Виды спорта в котором занимаются и девушки и юноши');
Writeln('╔═════════════╗');
Writeln('║ Вид спорта ║');
Writeln('╠═════════════╣');
y:=10;
for i:=1 to 3 do with Gruppa do writeln(Vid_sporta);
Writeln('║');
gotoxy(3,5+y);
gotoxy(15,5+y);
Writeln('║');
if i=3 then
y:=y+2;
writeln('╚═════════════╝');
readkey;
end.
uses crt;
type student=record
Surname,Vid_sporta:string[20];
God_rozhdeniya:word;
Pol:char;
Kurs,Nom_p_p:Byte;
end;
var
Gruppa:array [1..3] of student;
i,y:integer;
begin
clrscr;
writeln('Заполните таблицу');
Writeln('╔════╦═════════════╦═════════╦═══╦════╦════════════╗');
Writeln('║№п/п║ Фамилия ║Год рожд.║Пол║Курс║ Вид спорта ║');
Writeln('╠════╬═════════════╬═════════╬═══╬════╬════════════╣');
y:=0;
for i:=1 to 3 do with Gruppa do
begin
Writeln('║');
gotoxy(3,5+y);
readln(Nom_p_p);
gotoxy(6,5+y);
Write('║');
readln(Surname);
gotoxy(20,5+y);
Write('║');
readln(God_rozhdeniya);
gotoxy(30,5+y);
Write('║');
readln(Pol);
gotoxy(34,5+y);
Write('║');
readln(Kurs);
gotoxy(39,5+y);
Write('║');
readln(Vid_sporta);
gotoxy(52,5+y);
writeln('║');
y:=y+2;
if i<3 then
Writeln('╠════╬═════════════╬═════════╬═══╬════╬════════════╣');
if i>=3 then
writeln('╚════╩═════════════╩═════════╩═══╩════╩════════════╝');
end;
{Вывод информации}
Writeln('Виды спорта в котором занимаются и девушки и юноши');
Writeln('╔═════════════╗');
Writeln('║ Вид спорта ║');
Writeln('╠═════════════╣');
y:=10;
for i:=1 to 3 do with Gruppa do writeln(Vid_sporta);
Writeln('║');
gotoxy(3,5+y);
gotoxy(15,5+y);
Writeln('║');
if i=3 then
y:=y+2;
writeln('╚═════════════╝');
readkey;
end.
Код:
for i:=1 to 3 do with Gruppa do writeln(Vid_sporta);
надо, наверное, так:
Код:
for i:=1 to 2 do
for j:=i+1 to 3 do
if (Gruppa.Vid_sporta = Gruppa[j].Vid_sporta) and (Gruppa.Pol <> Gruppa[j].Pol) then
writeln(Gruppa.Vid_sporta);
for j:=i+1 to 3 do
if (Gruppa.Vid_sporta = Gruppa[j].Vid_sporta) and (Gruppa.Pol <> Gruppa[j].Pol) then
writeln(Gruppa.Vid_sporta);
хотя может кто лучше и правельнее предложит.
Код:
for i:=1 to 2 do {with Gruppa do}
for j:=j+1 to 3 do with Gruppa do
if Vid_sporta=Vid_sporta[j] and [SIZE="4"]Pol<>Pol[m][/SIZE]
then writeln(Vid_sporta)
else writeln('Не было такого вида спорта');
for j:=j+1 to 3 do with Gruppa do
if Vid_sporta=Vid_sporta[j] and [SIZE="4"]Pol<>Pol[m][/SIZE]
then writeln(Vid_sporta)
else writeln('Не было такого вида спорта');
В смысле не запускается и указывает на идентификатор пола Pol[COLOR="Red"][[/COLOR]i]. Error 121.
Цитата: Guy
Что-то пол не проверят! Что может быть такое?Что ни пробовал не получается:(
В смысле не запускается и указывает на идентификатор пола Pol[COLOR="Red"][[/COLOR]i]. Error 121.
Код:
for i:=1 to 2 do {with Gruppa do}
for j:=j+1 to 3 do with Gruppa do
if Vid_sporta=Vid_sporta[j] and [SIZE="4"]Pol<>Pol[m][/SIZE]
then writeln(Vid_sporta)
else writeln('Не было такого вида спорта');
for j:=j+1 to 3 do with Gruppa do
if Vid_sporta=Vid_sporta[j] and [SIZE="4"]Pol<>Pol[m][/SIZE]
then writeln(Vid_sporta)
else writeln('Не было такого вида спорта');
В смысле не запускается и указывает на идентификатор пола Pol[COLOR="Red"][[/COLOR]i]. Error 121.
вот скажи ты смотрел код, который я привел??? я думаю что ответ - нет.
вот держи твой дополненный моим:
Код:
program Zapisi;
uses crt;
type student=record
Surname, Vid_sporta: string[20];
God_rozhdeniya: word;
Pol: char;
Kurs, Nom_p_p: Byte;
end;
var
Gruppa: array [1..3] of student;
i, y, j:integer;
begin
clrscr;
writeln('Заполните таблицу');
Writeln('г====T=============T=========T===T====T============¬');
Writeln('¦№п/п¦ Фамилия ¦Год рожд.¦Пол¦Курс¦ Вид спорта ¦');
Writeln('¦====+=============+=========+===+====+============¦');
y:=0;
for i:=1 to 3 do
with Gruppa do
begin
Writeln('¦');
gotoxy(3,5+y);
readln(Nom_p_p);
gotoxy(6,5+y);
Write('¦');
readln(Surname);
gotoxy(20,5+y);
Write('¦');
readln(God_rozhdeniya);
gotoxy(30,5+y);
Write('¦');
readln(Pol);
gotoxy(34,5+y);
Write('¦');
readln(Kurs);
gotoxy(39,5+y);
Write('¦');
readln(Vid_sporta);
gotoxy(52,5+y);
writeln('¦');
y:=y+2;
if i<3 then
Writeln('¦====+=============+=========+===+====+============¦');
if i>=3 then
writeln('L====¦=============¦=========¦===¦====¦============-');
end;
{Вывод информации}
Writeln('Виды спорта в котором занимаются и девушки и юноши');
Writeln('г=============¬');
Writeln('¦ Вид спорта ¦');
Writeln('¦=============¦');
y:=10;
for i:=1 to 2 do
for j:=i+1 to 3 do
if (Gruppa.Vid_sporta = Gruppa[j].Vid_sporta) and (Gruppa.Pol <> Gruppa[j].Pol) then
writeln(Gruppa.Vid_sporta);
Writeln('¦');
gotoxy(3,5+y);
gotoxy(15,5+y);
Writeln('¦');
if i=3 then
y:=y+2;
writeln('L=============-');
readkey;
end.
uses crt;
type student=record
Surname, Vid_sporta: string[20];
God_rozhdeniya: word;
Pol: char;
Kurs, Nom_p_p: Byte;
end;
var
Gruppa: array [1..3] of student;
i, y, j:integer;
begin
clrscr;
writeln('Заполните таблицу');
Writeln('г====T=============T=========T===T====T============¬');
Writeln('¦№п/п¦ Фамилия ¦Год рожд.¦Пол¦Курс¦ Вид спорта ¦');
Writeln('¦====+=============+=========+===+====+============¦');
y:=0;
for i:=1 to 3 do
with Gruppa do
begin
Writeln('¦');
gotoxy(3,5+y);
readln(Nom_p_p);
gotoxy(6,5+y);
Write('¦');
readln(Surname);
gotoxy(20,5+y);
Write('¦');
readln(God_rozhdeniya);
gotoxy(30,5+y);
Write('¦');
readln(Pol);
gotoxy(34,5+y);
Write('¦');
readln(Kurs);
gotoxy(39,5+y);
Write('¦');
readln(Vid_sporta);
gotoxy(52,5+y);
writeln('¦');
y:=y+2;
if i<3 then
Writeln('¦====+=============+=========+===+====+============¦');
if i>=3 then
writeln('L====¦=============¦=========¦===¦====¦============-');
end;
{Вывод информации}
Writeln('Виды спорта в котором занимаются и девушки и юноши');
Writeln('г=============¬');
Writeln('¦ Вид спорта ¦');
Writeln('¦=============¦');
y:=10;
for i:=1 to 2 do
for j:=i+1 to 3 do
if (Gruppa.Vid_sporta = Gruppa[j].Vid_sporta) and (Gruppa.Pol <> Gruppa[j].Pol) then
writeln(Gruppa.Vid_sporta);
Writeln('¦');
gotoxy(3,5+y);
gotoxy(15,5+y);
Writeln('¦');
if i=3 then
y:=y+2;
writeln('L=============-');
readkey;
end.
Все работает!Спасибо огромное! Но есть минус. При вводе студентов с одиннаковым видом спорта в 1 строку и в 3 поиск не срабатывает, т.к. цикл сравнивает между собой 1и2,2и3 записи. Что делать?
Может кто-то сможет составить блок-схему на эту задачу?