2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 "Паскаль. Использование множеств"
Сообщение04.12.2008, 14:56 


04/12/08
8
Помогите пожалуйста с задачей, У нас программирование ведет училка которая ничего не объясняет а только орет!!! и я не могу ничего понять!! вот она задала эту задачу, я долго мучался над выводом "y" но не как не выводит! Заранее спасибо

Даны три множества X1, Х2, ХЗ, содержащие целые числа из диапазона 1…100. Известно, что мощность каждого из этих множеств равна 10. Сформировать новое множество Y = Х1+Х2 -X3, из которого выделить подмножество нечетных чисел. На экран вывести исходные и полученное множества.

 Профиль  
                  
 
 
Сообщение04.12.2008, 16:38 
Заслуженный участник
Аватара пользователя


01/08/06
3054
Уфа
Вывод на экран осуществляется примерно так:

Пусть A - переменная, содержащая множество, i - целая переменная, пробегающая по всем элементам этого множества (от 1 до 100).
Код:
for i := 1 to 100 do
  if i in A
  then Write(i,' ');
WriteLn;

 Профиль  
                  
 
 
Сообщение04.12.2008, 20:29 


04/12/08
8
worm2 все равно не выводит, мне кажется что в самой проге ошибки, потому что как ты написал так я и до этого делал а толку 0! лучше попробуй поискать ошибки я щас прогу вышлю!
Код:
[b]program pr1;[/b]
uses crt;
var i,k:integer;
y,x1,x2,x3:set of 1..10;
begin
  clrscr;
  x1:=[];x2:=[];x3:=[];y:=[];
  writeln ('mnozhestvo x1:');
  for i:=1 to 10 do
        begin k:=random (101);
          x1:=x1+[k];
          write(k,' ');
        end;
  writeln;
  writeln ('mnozhestvo x2:');
  for i:=1 to 10 do
       begin k:=random (101);
         x2:=x2+[k];
         write(k,' ');
       end;
  writeln;
  writeln ('mnozhestvo x3:');
  for i:=1 to 10 do
        begin k:=random (101);
          x3:=x3+[k];
          write(k,' ');
        end;
  writeln;
  writeln ('mnozhestvo y:');
  y:=(x1+x2)-x3;
  for i:=1 to 100 do
  if i in y then
  write (i,'  ');
  readln;
end.

 Профиль  
                  
 
 
Сообщение04.12.2008, 20:48 
Заслуженный участник


12/07/07
4448
0. «Для оформления текстов программ нужно использовать тэг [ code ] ... [ /code ]»(указание модератора maxal). Пожалуйста, отредактируйте свое сообщение.
1. Неверно генерируются множества. Функция random(n) возвращает значения от 0 до n-1.
2. Пропущен writeln после вывода X3 (перед получением Y).
3. Не запрограммировано формирование подмножества Y — назовем его Z — состоящего из нечетных чисел (именно его и надо выводить на экран).

Добавлено спустя 2 минуты 40 секунд:

4. Пропущена одинарная ковычка в writeln (mnozhestvo x3:');

 Профиль  
                  
 
 
Сообщение04.12.2008, 20:48 
Заслуженный участник
Аватара пользователя


01/08/06
3054
Уфа
Ну, и
5. вместо
Код:
y,x1,x2,x3:set of 1..10;
должно быть
Код:
y,x1,x2,x3:set of 1..100;

 Профиль  
                  
 
 
Сообщение04.12.2008, 20:58 


04/12/08
8
а как вообще записать подмножество с нечетными числами? тоже создать множество z:set of 1..100????

 Профиль  
                  
 
 
Сообщение04.12.2008, 21:03 
Заслуженный участник


12/07/07
4448
s-a-n-o писал(а):
а как вообще записать подмножество с нечетными числами? тоже создать множество z:set of 1..100????
Да, и воспользоваться функцией odd.

 Профиль  
                  
 
 
Сообщение04.12.2008, 21:07 
Заслуженный участник
Аватара пользователя


23/07/05
17973
Москва
s-a-n-o в сообщении #164651 писал(а):
Код:
for i:=1 to 10 do
        begin k:=random (101);
          x1:=x1+[k];
          write(k,' ');
        end;


6. При таком способе формирования множества в нём может оказаться меньше 10 элементов, так как очередной элемент может совпадать с одним из ранее включённых.

s-a-n-o в сообщении #164669 писал(а):
тоже создать множество z:set of 1..100?


Разумеется, создать и перенести в него требуемые элементы. Или из имеющегося множества удалить ненужные (если само это множество уже не нужно).

 Профиль  
                  
 
 
Сообщение04.12.2008, 21:22 


04/12/08
8
Блин ребята, вы конечно простите что трачу ваше время, но я не очень то и понимаю... конечно я кажусь тормозом, но все же допишите мне кто-нибудь эту программу, я просто за сегодня узнал столько нового, когда преподаватель говорит что можно делать так и только так, а вы утверждаете обратное это дейтвует и на психику и на мозги :)

 Профиль  
                  
 
 
Сообщение04.12.2008, 22:59 
Заслуженный участник


12/07/07
4448
0. Формально, дописывать за Вас программу — это нарушить правила Форума. Но дело не только, и не столько в правилах. «Ребята», которые отвечали в этой теме, — а этим ребятам кому за 40, а кому и больше, — не хотят, и не будут помогать обманывать преподавателя, хотя бы потому, что сами являются или были преподавателями, руководят дипломниками и аспирантами. А вот совсем немного помочь я попробую.

1. Начальные значения множествам X1, X2, X3 можно просто задать в программе (указаний преподавателя по этому поводу Вы не написали). Например
Код:
X1:= [1..10]
Но можно запрашивать ввод с клавиатуры — это потребует заметно больше усилий по программированию проверок.

2. Формирование подмножества Z можно выполнить таким образом
Код:
Z:= [];
for i:= 1 to 100 do if odd(i) then if i in Y then Z:= Z + [i];

 Профиль  
                  
 
 
Сообщение04.12.2008, 23:39 


04/12/08
8
а точно... спасибо огромное! я понял наконецто! если будут проблемы я еще спрошу, можно?

Добавлено спустя 15 минут 42 секунды:

GAA
вот у меня вопрос почему он выводит число стоящее в цикле for например в вашем примере 100! и если любое число вводишь до скольки делать цикл for он это число и выводит!

Добавлено спустя 20 минут 19 секунд:

и где в конце проги ставить вывод? если в цикле if то он выводит все числа от 1 до 100. а если после цикла то выводит число, до которого в for'е поставлено условие!

 Профиль  
                  
 
 
Сообщение05.12.2008, 10:28 
Заслуженный участник


12/07/07
4448
s-a-n-o писал(а):
и где в конце проги ставить вывод?

В одном цикле формируем множество Z. Выводим множество Z в другом цикле:
Код:
for i:= 1 to 100 do if i in Z then Write(i); WriteLn;

Если выводить множество нужно непременно по мере его формирования, то делаем так
Код:
for i:= 1 to 100 do if odd(i) then if i in Y then begin Z:= Z + [i]; Write(i, ' ') end;


Примечания.
A. Использовать odd совершенно не обязательно. Можно цикл формирования подмножества Z построить так
Код:
Z := [];
i := 1;
while i < 100
do begin
      if i in Y then Z:= Z + [i];
      i:= i+2;
     end;
На мой взгляд, использование odd делает текс более читабельным. Да и знакомым преподавателям программирования использование odd нравится больше: учащийся «демонстрирует свой богатый словарный запас».

B. Если формировать множества X1, X2, X3 нужно именно случайно, то для получения множеств из 10 элементов можно поступить таким образом. Определим переменную count целого типа для «текущей» мощности формируемого множества, и будем формировать множество X при помощи
Код:
X2:= [];
Count:= 0;
while Count < 10          {До тех пор пока число элементов множества меньше 10}
do begin                 {делаем: }
     i:= 1 + random(100); {Получаем случайное целое в диапазоне 1..100}
     if not (i in X2)     {Если очередное целое не содержится в множестве}
      then begin          {то
            X2:= X2 + [i];{  добавляем его в это множество }
            inc(Count)    {  и увеличиваем число элементов множества на 1}
           end;
    end;
for i:= 1 to 100 do if i in X2 then Write(i, ' ');
WriteLn;
Конечно, и в этм случае вывод элементов на экран можно выполнять одновременно с формированием множества. Предоставляю Вам, при желании, выполнить эту модификацию.

 Профиль  
                  
 
 
Сообщение05.12.2008, 12:16 


04/12/08
8
GAA
Спасибо огромное за помошь! у меня все получилось программа идет! спасибо что научили использовать "odd" классная вещь, до этого момента я просто прибавлял в цикле какой элемент брать! а теперь удобнее! и я прав inc(count) можно заменить Count:=count+1;???

 Профиль  
                  
 
 
Сообщение05.12.2008, 12:40 
Заслуженный участник


12/07/07
4448
s-a-n-o писал(а):
и я прав inc(count) можно заменить Count:=count+1;
Да, Вы правы. inc(count) можно заменить на count:= count + 1. Функция inc не является функцией авторской версии языка «Паскаль», а введена позднее в различных «диалектах», в том числе и в «диалекте» Turbo Tascal.

 Профиль  
                  
 
 
Сообщение05.12.2008, 13:51 


04/12/08
8
GAA
а как например без условия подмножества с нечетными числами просто вывести y? мне так для того чтобы понять! напишите плиз...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 17 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group