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

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

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

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

Помогите, пожалуйста, с задачей на Паскале

Регистрация
13 Май 2011
Сообщения
49
Реакции
0
Баллы
0
Помогите, пожалуйста, с задачей на Паскале

Составить программу, организующую работу с пользователем в диалоговом режиме: программа запрашивает слово с заданным числом слогов, проверяет правильность ввода такого слова и выводит следующий запрос. Окончание работы – ввод пустой строки. Программа также должна подсчитывать количество правильных ответов и выводить, сколько баллов набрал пользователь и количество попыток.

вот моя программа, но она не работает....в чем ошибка? я не могу разобраться(

program romanuk_6_2;
uses crt;
var a:string;
z: set of char;
n,n1,i,x,c:integer;
begin
textbackground(black);
clrscr;
z:=[' а','е','ё','и','о','у','ы','э','ю','я'];
x:=3;
randomize;
c:=random(5)+2;
textcolor(white);
writeln('введите слово из ',c,' слогов ');
textcolor (white);
read(a);
repeat
for i:= 1 to length(a) do
begin
if a in z then
begin
n:=n+1;
end;
end;
n1:=n1+n;
x:=x-1;
if n=c then
begin
textcolor(green);
writeln('правильно! вы набрали',n1,' бала(ов)');
writeln('у вас осталось',x,' попытки(ок)');
end
else
begin
textcolor(red);
writeln('неверно!');
writeln('у вас осталось ',x,' попытки(ок)');
end;
if x<=0 then
begin
textcolor(green);
writeln('кол-во попыток = 0!игра закончена ');
writeln('вы набрали ',n1,'бала(ов) ');
break
end;
until a='';
READLN;
end.
 
Черт, трудно мне проверять из-за этого изобилия кириллицы, но кое-что видно сразу, а именно
Чтение строковой переменной осуществляется ТОЛЬКО оператором Readln. Read для этого не годится.
Исправьте - дальше посмотрим.
 
ну вот, уже чуть-чуть лучше, но у него не работает генератор чисел( точнее на протяжении "игры" он просит вводить слова с одинаковым кол-ом слогов)) и после первой попытки(которая работает нормально), вторая и третья всегда выдают ошибку.
 
и что с кириллицей? лучше на латыне это писать?
Нет-нет, это мои заморочки: у меня DOS-Паскаль, а там кодировки другие. Поэтому для меня возня с кириллицей - головная боль. Ладно, сейчас попробую отладить.
 
Попробуйте такой вариант:
Код:
uses crt;
var
 a:string;
 z: set of char;
 n,n1,i,x,c:integer;
 yn:char;
 b:boolean;
begin
 textbackground(black);
 clrscr;
 z:=['а','е','и','о','у','ы','э','ю','я'];
 randomize;
 n1:=0;
 Repeat
  x:=3;
  c:=random(5)+2;
  textcolor(white);
  repeat
   n:=0;
   b:=false;
   writeln('введите слово из ',c,' слогов ');
   textcolor (white);
   readln(a);
   If a<>'' then
    begin
     for i:= 1 to length(a) do
      if a[i] in z then n:=n+1;
     if n=c then
      begin
       textcolor(green);
       n1:=n1+n;
       writeln('правильно! вы набрали ',n1,' балла(ов)');
       b:=true;
      end
     else
      begin
       textcolor(red);
       writeln('неверно!');
       x:=x-1;
       writeln('у вас осталось ',x,' попытки(ок)');
      end;
    end;
  until b or (x=0) or (a='');
  if x=0 then
   begin
    textcolor(green);
    writeln('кол-во попыток = 0! игра закончена ');
    writeln('вы набрали ',n1,' балла(ов) ');
   end;
  write('сыграем еще (д/н)? ');
  readln(yn);
 Until (yn='н') or (yn='Н');
end.
Исправлены ошибки (в т.ч. грамматические: "балл" как оценка, в отличие от танцевального вечера, пишется с двумя "л"). Из наиболее грубых - в первую очередь пробел перед 'а' в перечислении элементов множества: абсолютно недопустимо!
 
огромное спасибо)))все отлично работает))
а за грамматические ошибки я извиняюсь,у меня такое бывает)
 
правда еще один вопрос, как работает переменная b?я ее убрал, понял что без нее никак, но почему так, не понимаю)
 
правда еще один вопрос, как работает переменная b?я ее убрал, понял что без нее никак, но почему так, не понимаю)
Да... очень просто. Если играющий набрал слово с правильным числом слогов, то она становится true, а если она стала true, то дальнейшие попытки уже не нужны. Флажок такой.
 
Да... очень просто. Если играющий набрал слово с правильным числом слогов, то она становится true, а если она стала true, то дальнейшие попытки уже не нужны. Флажок такой.

окей ,спасибо большое)))) теперь все понятно)
 
Назад
Сверху