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

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

02.12.2016, 11:13. Просмотров 850. Ответов 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2016, 11:13
Ответы с готовыми решениями:

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

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

Программа работает некорректно
После выполнения программы видает ошибку: "Access violation... Write of address..." Задча...

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

6
CAPITAL OF ROCK!
1280 / 707 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
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
Модератор
60618 / 45592 / 31471
Регистрация: 18.05.2008
Сообщений: 109,607
02.12.2016, 11:45 3
Так выводить нужно не при вычислении, а из множества.
Pascal
1
2
for i:=1 to 100 do
if i in dig then write(i,' ');
0
CAPITAL OF ROCK!
1280 / 707 / 982
Регистрация: 03.03.2010
Сообщений: 2,286
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
Модератор
60618 / 45592 / 31471
Регистрация: 18.05.2008
Сообщений: 109,607
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
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
Модератор
60618 / 45592 / 31471
Регистрация: 18.05.2008
Сообщений: 109,607
04.12.2016, 12:52 7
Цитата Сообщение от symbian767 Посмотреть сообщение
Но не смог удалить тему
Да и в любом случае не смогли бы удалить, нет у Вас такого права, просто могли бы привести свое решение и написать что тема не актуальна.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2016, 12:52

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Программа работает некорректно
Помогите исправить ошибку. плиззз... Программа в гостевом каталоге не выдает ошибки.... Это как то...

Некорректно работает программа
По заданию мне нужно найти сумму максимального и минимального элементов, но что-то не правильно...

Некорректно работает программа
При создании c1 все еще правильно. При выполнении операторов уже нет. Почему? #include <iostream>...

Некорректно работает программа на С/С++
Запускается программа вот её код #define _CRT_SECURE_NO_WARNINGS #include <windows.h> #include...


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

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

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