• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Повтор фрагмента, Паскаль

Дмитрий`

Ученик
Регистрация
11 Дек 2011
Сообщения
3
Реакции
0
Баллы
0
Повтор фрагмента, Паскаль

Суть такая, программа простейшая и ее написать не составило труда, но вот сделать так чтобы она повторялась по желанию пользователя не получилось, пожалуйста подскажите где ошибка(писал через Turbo Pascal)

program test1 ;

uses crt ;

var l1,l2 : integer;
flag : char;

BEGIN
clrscr;

repeat
textcolor(green);
textbackground(blue);
Writeln('Введите расстояние в см : ');
read(l1);
l2:=l1 div 100;
Writeln(l1,' см равно = ',l2,' метров');
Writeln('Повторить (Y/y) ?');
readln(flag);
until upcase(flag)<>'Y';




readln;
readln;


END.
 
Можно с помощью метки и оператора goto, но это не самый лучший вариант, хотя и самый простой.
 
Я тоже об этом думал, но во всех источниках говориться что этого лучше избежать, я хочу сделать с помощью операторов repeat и until, но через них не выходит ><
 
Ну да, есть несколько ошибок.
1. Не вдаваясь в подробности, прошу запомнить: экранный ввод следует делать оператором ReadLn, а ни в коем случае не Read, ну или по крайней мере им заканчивать. Read следует применять с осторожностью. В Вашей программе первое считывание с помощью Read привело к тому, что программа не останавливается при запросе символа продолжения работы.
2. Формат чисел l1 и l2 лучше задать, как LongInt. С Integer диапазон в сантиметрах уж больно убогий.
3. Эти CRT-шные игрушки-побрякушки с цветом шрифта и фона вовсе ни к чему загонять в тело цикла - достаточно их задать в начале программы.
4. Readln в конце, да еще в двух экземплярах, там вовсе лишний: программа и так останавливается при вводе очередного значения длины.
Итого:
Код:
uses crt ;
var
 l1,l2 : LongInt;
 flag : char;

BEGIN
 clrscr;
 textcolor(green);
 textbackground(blue);

 repeat
  Write('Введите расстояние в см : ');
  readln(l1);
  l2:=l1 div 100;
  Writeln(l1,' см равно ',l2,' метров');
  Writeln('Повторить (Y/N) ?');
  readln(flag);
 until upcase(flag)<>'Y';

END.
 
Большое спасибо Vladimir_S, вы мне очень помогли, учту все ваши замечания.
 
Назад
Сверху