Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Множества, модули, массивы... :(

Автор: Юлька 2.04.2003 18:26

Привет всем !

Делали мне как-то тут задачки. Сдала лабы, защитила. Но вот новые задания выдали... Опять нужна помощь... sad.gif
Спасибо тем, кто откликнется и поможет.

Лабораторная работа   12:  Множества .
Задание: Даны два множества A и B. Постройте из них следующее множество: A*B-A.

Лабораторная работа   13:  Модули .
Задание: Дан массив чисел (n=1000). Напечатать элементы массива, которые являются:
А) степенями двойки (1,2,4,8,16,.);
Б) полными квадратами (1,4,9,16,25,.).

Автор: AlaRic 2.04.2003 21:53

Мне интересно: тебе не стыдно?

Автор: Ivs 2.04.2003 23:20

Юль, а там, в первой, множества задаются с клавиатуры или как константы.... ???

Автор: Ivs 3.04.2003 1:02

Вот собснно первая,......это если без заполнения с клавиатуры, если надо заполнять множества с клавы, то напиши, можно переделать....

Код

Program _Set_;

Type
  Set_Byte = Set of 0..255;  { Множество может принимать до 255 различных значений }
Var
  A,B      : Set of 0..50;
  New_Set  : Set of 0..100;
Begin
  A:=[1,3,5,2,0];            { Заполняем множество A числами }
  B:=[1,8,9,6,4];            { Заполняем множество B числами }
  New_Set:=A*B-A;            { Формируем новое множество     }
end.

Вот собсноо и вторая.....
Если что не так как хотелось бы не стесняйся спрашивай, поможем чем сможем.......
Код

Program Exponent_Too;

Const
  N = 1000;  { Количество элементов }

Var
  A    : Array [1..N] of Integer;
  i    : Integer;
  r    : Real;
  Bool : Boolean;

Begin
  Randomize; { Заполнение массива случайными числами от 1 до N }
  for i:=1 to N do
  begin
     A[i]:=Random(N);
     Write(A[i],' ');
  end;
  {=A=}
  Writeln;
  Writeln('--- Exponents Too ----');
  for i:=1 to N do
  begin
     { Инициализируем переменные }
     bool:=TRUE;
     r:=A[i];
     { Если четное то проверяем дальше }
     if (A[i] mod 2 = 0) and (A[i]<>0) then
     { Делим на 2 до тех пор пока r не равно 2}
      while (bool) and (r<>2) do
      begin
         r := r/2;
         { Если успешно делится то делим дальше, иначе это не то число и выход }
         if frac(r)<>0 then bool:=FALSE;
      end;
      { Число разделилось до двух значит то что надо и выводим на экран }
      if r=2 then Write('A[',i,']=',A[i],' ');
  end;
  Writeln;
  Writeln('Press Any Key ...');
  Readln;
  {=B=}
  Writeln('--- Full Square ---');
  { Проверка на квадрат }
  for i:=1 to N do
  begin
     { Получаем квадратный корень в r }
     r:=sqrt(A[i]);
     { Если r это целое число то выводим его на экран }
     if frac(r)=0 then Write('A[',i,']=',A[i],' ');
  end;
  Readln;
End.

Цитата
Мне интересно: тебе не стыдно?

Ну и что..зато смотри как тема красиво называется, почему бы и не помочь? что такого то????

Автор: Юлька 3.04.2003 7:18

Ivs, да, надо с клавиатуры smile.gif Если переделаешь - буду очень признательна. Хотя все равно спасибище большое !! smile.gif)

AlaRic
Нет, не стыдно. Я не знаю информатику, и, как ни странно, не стыжусь этого... Людям свойственны некоторые подобные вещи.. smile.gif
Вообще, могли бы просто промолчать... sad.gif

Автор: Юлька 3.04.2003 7:53

Ivs, я, конечно, туповата, но... в первой задаче на экран вообще ничего не выводится... smile.gif
Там надо дописать что-то где-то ? writeln и все такое ? ;)) Я не знаю куда писать...

AlaRic, не злись пожалуйста.. smile.gif

Автор: AlaRic 3.04.2003 13:57

Юль, мир!

Автор: Юлька 3.04.2003 19:02

AlaRic
...а дружба и жвачка ?? smile.gif

Ivsik !!  :-*
Я пишу writeln (New_Set), а он выдает мне что не может это на экран написать... (это я про прервую задачу). А так вроде запускается.. но только непонятно что происходит.. Я Alt+F5 нажимаю, а там пусто... Результата нету sad.gif

Автор: Ivs 3.04.2003 23:23

Вот переделал первую как просила, элементы множеств заполняются с клавиатуры.
К сожалению в Паскале не предусмотрен вывод множества на экран, поэтому нам
это сделать не удастся, конечно множества можно предстовлять в виде массивов
и работать с ними, но я думаю, что задача предложенная в качестве темы "Множества"
должна работать с типом данных Множество предусмотренном в Паскале.
И никакие WriteLn нам не помогут... :(
А удостовериться в получении нового множества, сформированного по предложенному принципу,
можно только силами отладчика.

Код

Program _Set_;

Const
  N = 5;       { Количество вводимых элементов множеств }

Type
  Set_Int = Set of 0..50;  { Диапазон значений }

Var
  A, B, NewSet : Set_Int;
  El           : 0..50;
  i            : Integer;

Begin
  Writeln('--- Работа с множествами ---');
  A:=[];    { A и B пустые множества }
  B:=[];
  { Заполнение множеств A и B с клавиатуры }
  for i:=1 to N do
  begin
     Write('Введите ',i,' -й элемент множества A (0-50) : ');
     Readln(El);
     { Если введеный элемент не входит в множество A то поместить }
     if NOT(El in A) then
     begin
      Writeln(El,' помещен в множество A.');
      A:=A+[El];
     end;
     Write('Введите ',i,' -й элемент множества B (0-50) : ');
     Readln(El);
     { Если введеный элемент не входит в множество B то поместить }
     if NOT(El in B) then
     begin
      Writeln(El,' помещен в множество B.');
      B:=B+[El];
     end;
  end;
  { Формирование нового множества NewSet }
  NewSet:=A*B-A;
  Writeln;
  Writeln('Создано два множества A и B');
  Writeln('и новое множество NewSet = A*B-A.');
  Readln;
End.

Автор: Юлька 4.04.2003 7:35

Ivs, я тебя почти люблю ;)