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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2008, 14:39   #1
Sota
Let's keep talking
Форумчанин Подтвердите свой е-майл
 
Аватар для Sota
 
Регистрация: 02.07.2007
Сообщений: 217
Сообщение доработка алгоритма...

Всем доброго времени суток!
Прошу помочь решить задачу на Pascal: необходимо из массива, заполненного случайными целочисленными значениями, на экран вывести только те, которые образуют возрастающие последовательности.
Я написал код, однако он работает несколько некорректно. Возможно вы найдете в нем ошибки или предложите более совершенный код.

Вот мой вариант решения:
Код:
program z1;
Uses CRT;
var z,x,i:integer;
    A:array[1..10] of integer;
    n:boolean;
begin clrscr;
{inizializaciya massiva}
for i:=1 to 10 do
begin
     x:=random(10);
     if x=5 then A[i]:=0
     else if x<5 then A[i]:=random(10)*(-1)
     else A[i]:=random(10);
end;
{inizializaciya massiva}
{vivod massiva na ekran}
for i:=1 to 10 do
begin
     write(A[i],'   ');
end;
{vivod massiva na ekran}
writeln(' ');writeln(' ');
z:=0;
for i:=1 to 10-1 do
begin
     if A[i]<A[i+1] then begin write(A[i],'  '); z:=0; end
     else z:=z+1;
     if z=0 then write(A[i+1],' | ');

end;
readkey;
end.
Всем заранее спасибо.
Лучше С++, чем ++С...
Sota вне форума Ответить с цитированием
Старый 13.06.2008, 14:43   #2
PUSHkiN
Пользователь
 
Регистрация: 12.06.2008
Сообщений: 43
По умолчанию

writeln(' ');writeln(' ');
z:=0;
for i:=1 to 10-1 do
begin
if A[i]<A[i+1] then begin write(A[i],' '); z:=0; end
else z:=z+1;
if z=0 then write(A[i+1],' | ');

end;
readkey;
end.

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

Да она работает...

z:=0;
for i:=1 to 10-1 do
begin
z:=0;
if A[i]<A[i+1] then begin write(A[i],' '); z:=0; end
else z:=z+1;
if z=0 then write(A[i+1],' | ');

end;
readkey;
end.

так она у тебя и так работала..... у тебя ещё Randomize нехватает, у тебя одними и теми же числами массив заполняет..

Последний раз редактировалось Stilet; 13.06.2008 в 15:00.
PUSHkiN вне форума Ответить с цитированием
Старый 13.06.2008, 15:45   #3
Sota
Let's keep talking
Форумчанин Подтвердите свой е-майл
 
Аватар для Sota
 
Регистрация: 02.07.2007
Сообщений: 217
По умолчанию

Заработало, но есть одно НО. Если возрастающая последовательность содержит более 2 чисел, то при выводе числа повторяются. Например:
Исходный: 1 2 3 4 -1
Вывод: 1 2| 2 3| 3 4|
Каким образом это можно исправить?
Лучше С++, чем ++С...
Sota вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработка функции Черничный Работа с сетью в Delphi 6 01.08.2008 15:51
Доработка Онлайн игры в стиле РПГ Splo1teR Gamedev - cоздание игр: Unity, OpenGL, DirectX 1 31.07.2008 19:19
Доработка программы... barmaJIei Фриланс 1 24.04.2008 21:23