Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Помогите, пожалуйста, с задачей на Паскале (http://www.tehnari.ru/f41/t74460/)

Андрей Романюк 04.06.2012 19:52

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

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

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[i] 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.

Vladimir_S 04.06.2012 20:28

Черт, трудно мне проверять из-за этого изобилия кириллицы, но кое-что видно сразу, а именно
Чтение строковой переменной осуществляется ТОЛЬКО оператором Readln. Read для этого не годится.
Исправьте - дальше посмотрим.

Андрей Романюк 04.06.2012 20:36

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

Андрей Романюк 04.06.2012 20:37

и что с кириллицей? лучше на латыне это писать?

Vladimir_S 04.06.2012 21:00

Цитата:

Сообщение от Андрей Романюк (Сообщение 743925)
и что с кириллицей? лучше на латыне это писать?

Нет-нет, это мои заморочки: у меня DOS-Паскаль, а там кодировки другие. Поэтому для меня возня с кириллицей - головная боль. Ладно, сейчас попробую отладить.

Vladimir_S 04.06.2012 21:19

Попробуйте такой вариант:
Код:

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.

Исправлены ошибки (в т.ч. грамматические: "балл" как оценка, в отличие от танцевального вечера, пишется с двумя "л"). Из наиболее грубых - в первую очередь пробел перед 'а' в перечислении элементов множества: абсолютно недопустимо!

Андрей Романюк 04.06.2012 21:40

огромное спасибо)))все отлично работает))
а за грамматические ошибки я извиняюсь,у меня такое бывает)

Андрей Романюк 04.06.2012 21:58

правда еще один вопрос, как работает переменная b?я ее убрал, понял что без нее никак, но почему так, не понимаю)

Vladimir_S 04.06.2012 22:30

Цитата:

Сообщение от Андрей Романюк (Сообщение 743997)
правда еще один вопрос, как работает переменная b?я ее убрал, понял что без нее никак, но почему так, не понимаю)

Да... очень просто. Если играющий набрал слово с правильным числом слогов, то она становится true, а если она стала true, то дальнейшие попытки уже не нужны. Флажок такой.

Андрей Романюк 04.06.2012 22:46

Цитата:

Сообщение от Vladimir_S (Сообщение 744033)
Да... очень просто. Если играющий набрал слово с правильным числом слогов, то она становится true, а если она стала true, то дальнейшие попытки уже не нужны. Флажок такой.

окей ,спасибо большое)))) теперь все понятно)


Часовой пояс GMT +4, время: 04:42.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.