Вывод множества из файла на экран - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

В студенческой группе 30 человек. 15 из них знают английский, 10 знают немецкий, 7 знают французский. 30 фамилий записаны в текстовом файле. Программа должна сама выбрать 15 фамилий владеющих английским, 10 немецким, 7 французским и вывести фамилии на экран. Выбор происходит рандомом. Проблема: Не понимаю как сделать так, чтобы прога сама выбирала 15, 10 и 7 фамилий соответственно. Помогите, второй день мучаюсь, стыдно даже как то!

Решение задачи: «Вывод множества из файла на экран»

textual
Листинг программы
var a:array[1..30] of byte;
    f:text;
    b,n1,n2,n3,i:byte;
    s1,s2,s3:array[1..15] of string;
    st:string;
    m,m1,m2,m3:set of byte;
begin
randomize;
m:=[]; //пустое общее множество
m1:=[]; //пустое множество номеров англичан
for i:=1 to 15 do //генерируем 15 номеров
 begin
  repeat
  b:=1+random(30); //от 1 до 30
  until not(b in m);//пока не выпдет такое которого пока нет в множестве
  m:=m+[b]; //добавим его в обшее
  m1:=m1+[b];//и в первое
 end;
m2:=[]; //точно так же с несмцами
for i:=1 to 10 do
 begin
  repeat
  b:=1+random(30);
  until not(b in m);
  m:=m+[b];
  m2:=m2+[b];
 end;
m3:=[]; //французы
for i:=1 to 5 do  //выбираем 5 оставщихся номеров, сейчас осенило что можно было просто
 begin           //m3:=[1..30]-m1-m2; хочешь переделай, а я спать
  repeat
  b:=1+random(30);
  until not(b in m);
  m:=m+[b];
  m3:=m3+[b];
 end;
for i:=1 to 2 do  //еще 2 таких которых нет в множестве 3
 begin
  repeat
  b:=1+random(30);
  until not(b in m3);
  m3:=m3+[b];
 end;
{writeln('Множество 3 '); //Это убери, я для проверки делал
for i:=1 to 30 do
if i in m3 then write(i,' ');
writeln; }
assign(f,'fam.txt'); //начинаем работ с файлом
reset(f);
n1:=0;  //мощности масивов-множеств
n2:=0;
n3:=0;
i:=0;  //номера
while not eof(f) do
 begin
  readln(f,st); //читаем фамилию
  i:=i+1; //определяем номер
  if i in m1 then //если он в  иножестве
   begin
    n1:=n1+1; //к англичанам
    s1[n1]:=st;
   end
  else if i in m2 then //если во 2
   begin
    n2:=n2+1;
    s2[n2]:=st; //к немцам
   end;
   //если в 3 или в 3 и 1 или в 3 и 2
  if (i in m3)or((i in m3)and(i in m1))or((i in m3)and(i in m2)) then
   begin
    n3:=n3+1;
    s3[n3]:=st;//к французам
   end;
 end;
close(f);
writeln('Знают английский');
for i:=1 to n1 do
write(s1[i],' ');
writeln;
writeln('Знают немецкий');
for i:=1 to n2 do
write(s2[i],' ');
writeln;
writeln('Знают французский');
for i:=1 to n3 do
write(s3[i],' ');
end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.6 из 5
Похожие ответы