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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2009, 18:58   #1
delphyok
Пользователь
 
Регистрация: 22.02.2009
Сообщений: 19
По умолчанию В чем ошибка?

Здравствуйте!

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

Код:
program my;

const
     p = 1000;

var
   a, n, state : integer;
   x : array[1..p] of integer;
   ch : char;

begin

 repeat
     writeln('Введите колличество частей: ');
     readln(n);
     for a:= 1 to n do
      begin
         write(a,'-я: ');
         read(x[a]);
      end;
      writeln('Значения введеных вами частей: ');
      for a := 1 to n do
       begin
            writeln(a,'-я: ',x[a]);
       end;
   write('Чтобы выйти нажмите "y"; чтобы продолжить, любую другую клавишу:');
   readln(ch);

   write(ord(ch));
 until ord(ch) = 121;

end.
По сценарию в конце прога должна запрашивать введения какого либо символа. Если введеный символ - "y"(код 121), то программа дожна завершаться, если другой символ, то цикл повторяется снова. Проблема заключается в том, что почему-то она не понимает введеного символа и на автомате все время пишет 13, т.е. как будто я ввожу "enter" . Кто знает, подскажите пожалуйста в чем проблема, почему так происходит? А если в четвертой строчке снизу вместо "readln(ch);" поставить просто "read(ch);", то она вообще ничего не запрашивает, пишет, что введеный код - 13, и начинает цикл заново, хотя я ничего не вводил. Что за ерунда... Помогите, двигаться дальше в обучении бессмысленно, если таких мелочах разобраться не можешь
delphyok вне форума Ответить с цитированием
Старый 22.02.2009, 19:10   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

После
Код:
program my;
допишите
Код:
uses crt;
Таким образом подключаем эту библиотеку.
А вместо
Код:
readln(ch);
напишите
Код:
ch := readkey;
эта функция возвращает код нажатой клавиши.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 23.02.2009, 19:24   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вообще концовка будет:
Код:
write('Чтобы выйти нажмите "y"; чтобы продолжить, любую другую клавишу:');
 ch:=readkey;
until ch=#121;
end.
puporev вне форума Ответить с цитированием
Старый 23.02.2009, 20:48   #4
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

можно так
Код:
until readkey=#121
capta1n вне форума Ответить с цитированием
Старый 24.02.2009, 18:40   #5
delphyok
Пользователь
 
Регистрация: 22.02.2009
Сообщений: 19
По умолчанию

Спасибо всем ответившим, сделал как посоветовали, все отлично . Правда я так и не понял, в чем же заключалась ошибка в моем варианте . Ведь разбирал же другие варианты из книги, там почему-то все работает, здесь же пишешь точно такую же оконцовку - не пашет... Ладно, может потом узнаю
delphyok вне форума Ответить с цитированием
Старый 24.02.2009, 19:05   #6
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Код:
readln(ch);

   write(ord(ch));
 until ord(ch) = 121;
Если пишет 13 значит вы нажали Enter. Концовка вполне нормальная только write(ord(ch)) нужно убрать
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 24.02.2009, 23:33   #7
NSvirus
пропагандирую жизЪ
Форумчанин
 
Аватар для NSvirus
 
Регистрация: 19.03.2007
Сообщений: 950
По умолчанию

until ch='y' , где y - string'овая переменная
Ошибочка, ch-стринг

Для редактирования своих постов есть кнопка "Правка".
Посторонним В.

Последний раз редактировалось mihali4; 25.02.2009 в 00:25. Причина: Объединение постов
NSvirus вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В ЧЕМ ОШИБКА? salmanbaz Общие вопросы C/C++ 5 11.01.2009 13:21
В чем ошибка? fosto Паскаль, Turbo Pascal, PascalABC.NET 3 07.12.2008 19:10
В чем ошибка ? Droid Общие вопросы Delphi 13 03.05.2008 18:17
В чем ошибка!!! juden Общие вопросы Delphi 12 10.03.2008 08:53
в чем ошибка? Lonix Общие вопросы Delphi 2 24.03.2007 09:41