Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   PascalABC, возможно ошибка (http://www.tehnari.ru/f41/t60042/)

Ильгиза 20.11.2011 15:26

PascalABC, возможно ошибка
 
необходимо распечатать множество,удовлетворяющее указанному условию и подсчитать количество элементов в полученном массиве.
Даны n целых чисел( числа вводятся с клавиатуры или с помощью датчика случайных чисел). Напечатать в порядке возрастания те из них, которые удовлетворяют условию:
делятся нацело на 3 и 8.

сделала так, но в своем решении не уверена(
Помогите разобраться!

program upr1;
const n =20;
type mn=set of 1..n;
var n3,n8:mn;
k,c:integer;
procedure vv(m:mn);
var i:integer;
begin
for i:=1 to n do
if i in m then begin
write(i:3);
k:=k+1;
end;
writeln;
end;
begin
n3:=[];
n3:=[];
for c:=1 to n do
begin
if c mod 3 = 0 then n3:=n3+[c];
if c mod 8 = 0 then n8:=n8+[c];
end;
writeln('числа кратные 3:');
vv(n3);
writeln('числа кратные 8:');
vv(n8);
writeln('количество элементов во множестве:', k);
end.

Long Cat 20.11.2011 15:31

Привел в читаемый вид:
Код:

program upr1;
  const
      n =20;
type
  mn=set of 1..n;
 var
  n3,n8:mn;
  k,c:integer;
procedure vv(m:mn);
  var
    i:integer;
begin
  for i:=1 to n do
    if i in m then
    begin 
        write(i:3);
        k:=k+1; 
    end;
    writeln;
end;
begin
  n3:=[];
  n3:=[];
  for c:=1 to n do
  begin
    if c mod 3 = 0 then n3:=n3+[c];
    if c mod 8 = 0 then n8:=n8+[c];
  end;
  writeln('числа кратные 3:');
  vv(n3);
  writeln('числа кратные 8:');
  vv(n8);
  writeln('количество элементов во множестве:', k);
end.

Переменная k нигде не инициализирована - ошибка.
Использование глобальной переменной k - стилистический минус.
Тестировали программу?

Ильгиза 20.11.2011 15:37

Спасибо! Да тестировала!Но я не уверена, что мое решение соответствует условию задачи.

Long Cat 20.11.2011 15:38

Не соответствует. Требуется вывести числа, которые делятся на 3 и на 8 одновременно.

Vladimir_S 20.11.2011 15:47

Цитата:

Сообщение от Ильгиза (Сообщение 620690)
сделала так, но в своем решении не уверена( Помогите разобраться!

Попробую.
В принципе вроде всё правильно, и программа работает, вот только...
1. Вам обязательно использовать тип "множество"? Дело в том, что исходная задачка решается безо всяких множеств, через массивы, куда как проще и короче. А так это из серии "достать правое ухо через-под левое колено". Можно, конечно, и так.
2. А вот это существеннее. На самом деле, Вы решили не совсем ту задачу, которая поставлена. Ведь в задаче говорится о вводе некоторого количества чисел либо с клавиатуры, либо через генератор случайных чисел, а Вы вместо этого просто берёте последовательность от 1 до 20. Так, конечно, проще, но в задаче требуется другое. И как такую задачу решать через множества я, откровенно говоря, не представляю.
P.S. Ну и замечания, высказанные LongCat, безусловно, тоже справедливы.

Vladimir_S 20.11.2011 15:51

Цитата:

Сообщение от Long Cat (Сообщение 620692)
Переменная k нигде не инициализирована - ошибка.

Ну, не совсем. Насколько я знаю, в этом ублюдочном АВС обнуление исходных значений переменных зашито. Включая даже строки.

Long Cat 20.11.2011 15:55

Цитата:

Сообщение от Vladimir_S (Сообщение 620704)
Насколько я знаю, в этом ублюдочном АВС обнуление исходных значений переменных зашито. Включая даже строки.

Цитата:

Сообщение от Vladimir_S (Сообщение 620704)
, в этом ублюдочном АВС

Цитата:

Сообщение от Vladimir_S (Сообщение 620704)
ублюдочном

Именно так.

Ильгиза 20.11.2011 16:02

Да, задачу нужно решить с множествами! И как это сделать я и сама не знаю(((
Как я знаю, вводить множества с клавиатуры непосредственно нельзя.


Часовой пояс GMT +4, время: 15:13.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.