Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Числовая последовательность

Автор: Lauri 15.01.2006 18:10

Задача такая - определить, являются ли введённые числа возрастающей последовательностью?
Вот так я это сделал:

Код

program posled;
uses crt;
var a:string;
    i,j,k:integer;
    b:byte;
    begin
    clrscr;
    writeln('BBEDITE CTPOKY:');
    readln (a);
    j:=length (a);
    for i:=1 to j do
     begin
     if a[i]<a[i+1] then b:=1
     end;

     if b=1 then
     writeln ('DA') else writeln ('HET');
         readln;
     end.


Но не понимаю в чём ошибка - программа работает некорректно... Помогите плиз разобраться..

Автор: klem4 15.01.2006 18:21

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

Автор: Гость 15.01.2006 18:28

А зачем же там массив использовать?... тем более я его там и не наблюдаю..) мне кажется со строкой там удобнее (можно длину определить) а в массиве так можно разве?

Автор: Pola 15.01.2006 18:30

Тут либо надо искать противоречие:

Код
  b:=1; {предположение}
    for i:=1 to j-1 do {j-1!!!!}
     begin
       if a[i]>=a[i+1] then b:=0 {противоречие}
     end;


Либо
считать количетсво правильно расположенных пар
и если количество = j-1, то вся последовательность упорядочена

Автор: klem4 15.01.2006 18:39

могу предложить такой вариант :

uses crt;
var
_pred,_succ,n,i : integer;
check : boolean;
begin

write('n = '); readln(n);

writeln('Введите последовательность');

i := 1; check := true;

readln(_pred);

while (i < n) and check do begin
readln(_succ);
check := (_pred < _succ);
_pred := _succ;
inc(i);
end;

writeln(check);

readln;
end.

Автор: Pola 15.01.2006 18:48

klem4, последовательность до конца не будет введена...
из файла было бы не страшно, а с клавы...


Хотя у Lauri скорее цифры сравниваются, чем числа...

Автор: klem4 15.01.2006 18:49

Можно сделать чтобы и до конца, какой только сысл ... представь сколько ты сэкономишь времени если у тебя в файле 100000 элементов а условие возрастания нарушается при первой проврке rolleyes.gif

Автор: Pola 15.01.2006 18:51

Я и говорю, что если бы был файл, то все ok,
а у нее с клавы...

Автор: klem4 15.01.2006 18:53

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

and check
и все будет ок ...

Автор: Pola 15.01.2006 18:55

Есть такой выход
вместо readln поставить read в твоем варианте
и просить вввести все числа в одну строуку через пробел
тогда будет не заметно, что ты пользователя прервал на полуслове

Цитата(klem4 @ 15.01.2006 14:53) *

Ну и что ошибки то нету никакой, я имею в виду рпограмма завернаештся корректно .. можно убрать
and check
и все будет ок ...


если убрать
and checK
будет ошибка

Автор: klem4 15.01.2006 18:59

Точно, тогда можно сдеать вот так :

while (i < n)  do begin
readln(_succ);
if check then check := (_pred < _succ);
_pred := _succ;
inc(i);
end;

Автор: volvo 15.01.2006 19:10

Pola, я не понял, ты умеешь только чужие решения критиковать? Свои шедевры ты считаешь зазорным выложить на форуме? dry.gif

Автор: Pola 15.01.2006 19:25

volvo, зачем за других делать?
вот ошибку можно помочь найти

учаться на своих ошибках...
а у меня способности искать ошибки. smile.gif

У меня тоже есть такие способности - искать ошибки, так почему ты мне эти способности не даешь проявить на твоих программах? blum.gif Нехорошо...

Автор: Lauri 15.01.2006 20:09

Да это не выход, даже если read и через пробел, то всё равно некорректно... буду как-нибудь другим способом, благо способов сортировки предостаточно..) всё равно спасибо за помощь;)

Автор: Pola 15.01.2006 20:16

volvo, а уменя пока по своим вопросов к тебе нет tong2.gif

а коды я давала... про стороны треугольника посмотри
и исправляй сколько хошь yes2.gif

Цитата(Lauri @ 15.01.2006 16:09) *

Да это не выход, даже если read и через пробел, то всё равно некорректно... буду как-нибудь другим способом, благо способов сортировки предостаточно..) всё равно спасибо за помощь;)


read и через пробел в проге klem4, а не в твоей

или цикл while в его же проге замени на последний им данный вариант (4 поста выше)

Автор: klem4 15.01.2006 20:18

Чем не понравился вот этот вариант ? Это какраз ТО что тебе нужно, не используется массив и последовательность вводится ПОЛНОСТЬЮ

http://forum.pascal.net.ru/index.php?s=&showtopic=8830&view=findpost&p=59065 - пост N11