Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 22.04.2012, 23:20   #1
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию Ошибка в коде (Delphi)

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

Условие задачи.
Дана последовательность из N натуральных чисел. Написать программу,
которая выводит в возрастающем порядке все четные цифры, которые не
входят только в одно число.

Код:
program Project2ik;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows;
type
  Tset=set of byte;
var
  a:array of Tset;
  mn,mn1:Tset;
  n,i,j,k,x:integer;
begin
  setconsolecp(1251);
  setconsoleoutputcp(1251);

  write('Введите количество натуральных чисел: ');
  readln(n);
  writeln('Введите ',n,' натуральных чисел:');
  for i:=0 to n-1 do
    begin
      repeat
        readln(x)
      until x>0;
      a[i]:=[];
      while x>0 do
        begin
          k:=x mod 10;
          if k mod 2=0 then
            a[i]:=a[i]+[k];
          x:=x div 10
        end
    end;

  mn1:=[];
  for i:=0 to n-1 do
    begin
      mn:=[];
      for j:=0 to n-1 do
        begin
          if j<>i then
            mn:=mn+a[j]
        end;
      mn1:=mn1+(a[i]*mn)
    end;

  if mn1=[] then writeln('Четных цифр, которые не входят в одно число, нет!')
  else
    begin
      writeln('Четные цифры, которые не входят в одно число:');
      for i:=0 to n do
        begin
          if i in mn1 then
            write(i);
          writeln
        end
    end;
  readln
end.
Начинающий програм вне форума
Старый 22.04.2012, 23:51   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Сомневаюсь в правильности самого решения, но теперь не вылетает:
Код:
program Project2ik;

{$APPTYPE CONSOLE}

uses
  SysUtils,
  windows;
type
  Tset=set of byte;
var
  a:array of Tset;
  mn,mn1:Tset;
  n,i,j,k,x:integer;
begin
  write('Count of numbers: ');
  readln(n);
  writeln('Input ',n,' numbers:');
  setlength(a,n);
  for i:=0 to n-1 do
    begin
      read(x);
      a[i]:=[];
      while x>0 do
        begin
          k:=x mod 10;
          if k mod 2=0 then
            a[i]:=a[i]+[k];
          x:=x div 10
        end
    end;

  mn1:=[];
  for i:=0 to n-1 do
    begin
      mn:=[];
      for j:=0 to n-1 do
        begin
          if j<>i then
            mn:=mn+a[j]
        end;
      mn1:=mn1+(a[i]*mn)
    end;

  if mn1=[] then writeln('No numbers')
  else
    begin
      writeln('Numbers:');
      for i:=0 to 9 do
        begin
          if i in mn1 then
            writeln(i);
        end
    end;
  readln;
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума
Старый 23.04.2012, 00:04   #3
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Спасибо!!! Можете сказать что именно вызывает у Вас сомнение в правильности кода?

Последний раз редактировалось Начинающий програм; 23.04.2012 в 00:15.
Начинающий програм вне форума
Старый 23.04.2012, 00:25   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Я пока не могу сказать, что именно в коде, но вот простейший пример:
5 чисел
23 24 25 26 27
Программа отвечает 2, но это не так

Вот мой вариант:
Код:
{$APPTYPE CONSOLE}

uses
  SysUtils;

var
  a:set of byte;
  b:array[0..9] of integer;
  n,i,j,x:integer;
  t:boolean;
begin
  for i:=0 to 9 do
    b[i]:=0;
  write('Count of numbers: ');
  readln(n);
  writeln('Input ',n,' numbers:');
  for i:=0 to n-1 do
    begin
      read(x);
      a:=[];
      while x<>0 do
      begin
        j:=x mod 10;
        if not(j in a) then
        begin
          inc(b[j]);
          a:=a+[j];
        end;
          x:=x div 10;
      end;
    end;

  t:=true;
  i:=0;
  while i<=8 do
  begin
    if b[i]=n-1 then
    begin
      t:=false;
      write(i,' ');
    end;
    i:=i+2;
  end;
  if t then
    write('No numbers');
  readln;
  readln;
end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 23.04.2012 в 00:38.
BDA вне форума
Старый 23.04.2012, 00:47   #5
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Да, запутанное условие. Возможно даже вы правы. Но я понял условие чуть иначе, если ввести 654 84 14 65 27 Должно получиться 4 6

Последний раз редактировалось Начинающий програм; 23.04.2012 в 00:53.
Начинающий програм вне форума
Старый 23.04.2012, 00:53   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Не входят только в одно число ~ входят во все кроме одного.
Цитата:
654 84 14 65 27
а по-моему, ни одного
4 не входит в 2 числа
6 не входит в 3 числа
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 23.04.2012 в 00:58.
BDA вне форума
Старый 23.04.2012, 01:05   #7
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

То есть из такого ряда 68 45 84 98 38 должно вывестись 8. ?
Начинающий програм вне форума
Старый 23.04.2012, 01:14   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

На мой взгляд, да.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума
Старый 23.04.2012, 01:21   #9
Начинающий програм
Форумчанин
 
Аватар для Начинающий програм
 
Регистрация: 22.11.2011
Сообщений: 201
По умолчанию

Я приму Ваше мнение к сведению. Благодарствую!
Начинающий програм вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в коде (Delphi) Начинающий програм Помощь студентам 6 08.04.2012 13:26
Ошибка в коде Delphi Начинающий програм Помощь студентам 6 06.02.2012 19:52
В коде ошибка (Delphi). Начинающий програм Помощь студентам 0 08.12.2011 19:58
Ошибка в коде программы Delphi Начинающий програм Помощь студентам 5 07.12.2011 23:46