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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2011, 21:11   #1
Skyes
Пользователь
 
Регистрация: 13.11.2011
Сообщений: 11
По умолчанию Задача на массив из чисел в Delphi

Вот программа на эту задачу, но она не работает, подскажите, почему?
program chisla;
{Условие:Пусть даны целые числа A1,A2...,An, среди которых могут быть повторяющиеся.
Составьте новый массив из чисел, которые входят в последовательность по одному разу.}

{$APPTYPE CONSOLE}
uses
SysUtils,
Windows;

var
a, b: array [1..30] of integer;
i, n, k, j: integer;
f: boolean;
begin
setconsolecp(1251);
setconsoleoutputcp(1251);
read(n);
for i:= 1 to n do
read(a[i]);
k:= 0;
for i:= 1 to n do
begin
f:= true;
for j:= 1 to k do
if (a[i] = b[j]) then
f:= false;
if f then
begin
inc(k);
b[k]:= a[i];
end;
end;
for i:= 1 to k do
write(b[i], ' ');
readln;
end.
Skyes вне форума Ответить с цитированием
Старый 13.11.2011, 21:48   #2
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Цитата:
Сообщение от Skyes Посмотреть сообщение
Вот программа на эту задачу, но она не работает, подскажите, почему?
program chisla;
{Условие:Пусть даны целые числа A1,A2...,An, среди которых могут быть повторяющиеся.
Составьте новый массив из чисел, которые входят в последовательность по одному разу.}
Вот так, пробуй!
Код:
program Project8;

{$APPTYPE CONSOLE}

uses
  SysUtils;
var
a, b: array [1..30] of integer;
i,raz,k,j,n: integer;
begin
  write('Vvedite razmernost = ');
  read(raz);
  write('Vvedite massive iz ',raz,' elementov = ');
  for i:= 1 to raz do
    read(a[i]);
  k:= 0;
  n:=0;
  for i:= 1 to raz do
  begin
    for j:= 1 to raz do
      if (a[i] = a[j]) and (i<>j) then
        inc(n);
    if n=0 then
    begin
      inc(k);
      b[k]:=a[i];
    end;
    n:=0;
  end;
  for i:= 1 to k do
    write(b[i],' ');
  readln;
  readln;
end.
Помог - жми на весы!
ByAlex89@mail.ru

Последний раз редактировалось ByAlex; 13.11.2011 в 22:47.
ByAlex вне форума Ответить с цитированием
Старый 13.11.2011, 23:37   #3
Skyes
Пользователь
 
Регистрация: 13.11.2011
Сообщений: 11
По умолчанию

Большое вам спасибо.
У меня вот только вопрос есть...
Ввожу размерность, массив, а дальше ничего не выполняется...
Skyes вне форума Ответить с цитированием
Старый 14.11.2011, 00:14   #4
ByAlex
Форумчанин
 
Аватар для ByAlex
 
Регистрация: 15.03.2011
Сообщений: 465
По умолчанию

Цитата:
Сообщение от Skyes Посмотреть сообщение
Большое вам спасибо.
У меня вот только вопрос есть...
Ввожу размерность, массив, а дальше ничего не выполняется...
Дак, ты как ввел размерность, например, 10, жми enter, и прога дальше пойдет!
Помог - жми на весы!
ByAlex89@mail.ru
ByAlex вне форума Ответить с цитированием
Старый 14.11.2011, 00:34   #5
Skyes
Пользователь
 
Регистрация: 13.11.2011
Сообщений: 11
По умолчанию

Ой, извините туплю.
Все понял, программа работает.
Еще раз большое спасибо!
Skyes вне форума Ответить с цитированием
Старый 23.11.2011, 23:43   #6
Skyes
Пользователь
 
Регистрация: 13.11.2011
Сообщений: 11
По умолчанию

Возникла проблема при сдаче задачи.
При вводе массива, например 1 1 1 1 1(размерность 5) программа молчит.
Необходимо сделать так, чтобы при вводе одинаковых чисел, программа выдавала сообщение"Массив пустой!"
Skyes вне форума Ответить с цитированием
Старый 24.11.2011, 11:27   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Необходимо сделать так, чтобы при вводе одинаковых чисел, программа выдавала сообщение"Массив пустой!"
А Вы зря не разобрали пример кода, который Вам дал ByAlex!
вот за это и поплатились!

В примере кода (c) ByAlex есть переменная k
она отвечает за то, в какую ячейку выходного массива помещать текущее число.
Тем самым, она представляет собой СЧЁТЧИК чисел в выходном массиве.
по строчке кода
Цитата:
Код:
for i:= 1 to k do
это наглядно видно.
очевидно, что если хочется выдать сообщение, что массив пустой, то нужно добавить проверку на то, что это переменная равна нулю.
например, так:
Код:
 if k=0 then WriteLn('Массив пустой. В исходном массиве нет неповторяющихся чисел!')
 else begin
   WriteLn('полученный массив: ');
   for i:= 1 to k do
        write(b[i],' ');
   WriteLn;
 end; 

 readln;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Одномерный массив в Delphi (Задача) Kawun Помощь студентам 10 18.06.2011 14:21
Массив целых чисел делится на три части двумя элементами: максимальным и минимальным (Delphi) eva-2030 Помощь студентам 6 15.05.2011 22:16
задача на последовательности чисел Delphi Lexey92 Помощь студентам 4 25.11.2010 02:51
Задача на Delphi. Сортировка чисел mr-professor Помощь студентам 2 22.03.2009 18:49