Форум программистов, компьютерный форум, киберфорум
Наши страницы
Turbo Pascal
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
symbian767
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 9
1

Некорректно работает программа

02.12.2016, 11:13. Просмотров 760. Ответов 6

Есть программа с использованием множеств. Задание: напечатайте все целые числа, лежащие в диапазоне от 5 до 100, которые представимы в виде 5n+7m, где n и m – целые числа (m, n >=0). Код есть, программа работает, но выводит дублированные значения. Такого быть не должно. Как можно исхитриться со множеством ещё, чтобы программа выполняла свою работу как надо?
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
program ononetakrabootaet;
var
  m,n,i,j,a:integer;
  dig:set of 5..100;
 begin
 writeln('Write max n:');
 readln(i);
 Writeln('write max m:');
 readln(j);
 dig:=[5..100];
   for n:=1 to i do
     for m:=1 to j do begin
      a:=5*n+7*m;
       if a in dig then write (a,' ');
      end;
 readln
 end.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2016, 11:13
Ответы с готовыми решениями:

Файлы. Некорректно работает программа
в процедуре поиска и вывода выдает только первые введенные значения Program Prim; uses crt; ...

Программа некорректно работает. Подскажите, что не так?
Дано натуральное четырехзначное число. Найти наименьшую нечетную цифру в числовой записи данного...

Среда работает некорректно
Установил паскаль брал с раздела - http://www.cyberforum.ru/pascal/thread89342.html Версию...

Программа некорректно выводит данные
Помогите пожалуйста, не могу найти ошибку. Программа работает, но вместо того чтобы выводить...

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

6
JokeR.BY
CAPITAL OF ROCK!
1278 / 705 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
Завершенные тесты: 2
02.12.2016, 11:28 2
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
const
    DIG: Set Of 5..100 = [5..100];
var
    m, n, i, j, a: Integer;
    showed: Set Of 5..100;
begin
    showed := [];
    Write('Write max n: '); ReadLn(n);
    Write('Write max m: '); ReadLn(m);
    for i := 0 to n do
        for j := 0 to m do
        begin
            a := 5*i + 7*j;
            if ((a in DIG) And Not (a in showed))
            then
            begin
                Write(a:4);
                Include(showed, a);
            end;
        end;
    WriteLn;
end.
0
Puporev
Модератор
56882 / 43457 / 30044
Регистрация: 18.05.2008
Сообщений: 103,541
02.12.2016, 11:45 3
Так выводить нужно не при вычислении, а из множества.
Pascal
1
2
for i:=1 to 100 do
if i in dig then write(i,' ');
0
JokeR.BY
CAPITAL OF ROCK!
1278 / 705 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
Завершенные тесты: 2
02.12.2016, 12:02 4

Не по теме:

чёт я основательно запутался в задании, после каждого прочтения - новое понимание


Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var
    m, n, i, j: Byte;
    dig: Set Of Byte;
begin
    dig := [5..100];
    Write('Write max n (0..20): '); ReadLn(n);
    Write('Write max m (0..', Trunc((100 - 5*n)/7), '): '); ReadLn(m);
    for i := 0 to n do
        for j := 0 to m do
            Exclude(dig, 5*i + 7*j);
    for i := 5 to 100 do
        if (i in dig)
        then
            Write(i:4);
    WriteLn;
end.
1
Puporev
Модератор
56882 / 43457 / 30044
Регистрация: 18.05.2008
Сообщений: 103,541
02.12.2016, 12:11 5
Лучший ответ Сообщение было отмечено symbian767 как решение

Решение

Во первых множество не от 5 а от 12 ибо 5*1+7*1=12
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
uses crt;
var m,n,a:integer;
    dig:set of 5..100;
begin
clrscr;//раз уж Турбо
dig:=[];
for m:=1 to (100-7) div 5 do
for n:=1 to (100-5) div 7 do
 begin
  a:=5*m+7*n;
  dig:=dig+[a];
 end;
for m:=12 to 100 do
if m in dig then write (m,' ');
readln
end.
1
symbian767
0 / 0 / 0
Регистрация: 21.10.2016
Сообщений: 9
04.12.2016, 12:46  [ТС] 6
В самом деле, озарение пришло почти сразу после того, как прислал сюда свой вопрос) Но не смог удалить тему по причине отключения Wi-Fi точки однокурсником. Вот мой вариант программы, так сказать, индусский код) Спасибо всем откликнувшимся! Его, к счастью, зачли)
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
program onorabootaet;
var
  q,m,n,i,j,a:integer;
  dig,td:set of 5..100;
 begin
 writeln('Write max n:');
 readln(i);
 Writeln('write max m:');
 readln(j);
 dig:=[5..100];
 td:=[ ];
   for n:=1 to i do
     for m:=1 to j do begin
      a:=5*n+7*m;
      if a>100 then
      break;
       if a in dig then
       td:= td + [a];
       end;
   for q:=0 to 255 do
if q in td then write(q,' ');
 readln
 end.
0
Puporev
Модератор
56882 / 43457 / 30044
Регистрация: 18.05.2008
Сообщений: 103,541
04.12.2016, 12:52 7
Цитата Сообщение от symbian767 Посмотреть сообщение
Но не смог удалить тему
Да и в любом случае не смогли бы удалить, нет у Вас такого права, просто могли бы привести свое решение и написать что тема не актуальна.
0
04.12.2016, 12:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2016, 12:52

Некорректно работает программа
Добрый вечер ! мне нужно найти произведение всех нечетных элементов массива , но почему то...

Программа работает некорректно
Почему выводится в итоге первое значение с = 0,5, а не последнее из цикла ...

Некорректно работает программа
Написал программу, при работе проскакивает через три цикла for сразу на writeln. В чём может быть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru