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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2011, 18:28   #1
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
Плохо Генерация варинта - ошибка

Захотел сделать такую программу. В компьютер вводится число.
Если оно более 10 по размеру, то выводится ошибка. Если оно=<0, то выводится Ошибка. Далее - число записывается в файл и считывается в ячейки типа String[1]. Если среди них, есть не цифра, то пишется ошибка.
Итак, ошибок нет, уменьшаем число на 1 и генерируем и выводим на экран число+1. У меня всегда ошибка. Кому удобнее скачать файл, прикладываю.

Код:
Program Variant;
USES CRT;
var
Kolvo_Variantov  :longint;
Kolvo_VariantovSt:String;
            ecshe:Char;
         tempfile:text;
            tempp:shortint;
            error:integer;
           simvol:array[1..10] of Char;
              i,j:Byte;
Procedure Programka; forward;
Procedure err;
          begin
               while KeyPressed do ReadKey;
               ecshe:=ReadKey;
               case ecshe of
                    #13: Programka;
                    #27: begin Rewrite(tempfile); Close(tempfile); Halt; end;
                    else err;
               end; {case}
          end;


Procedure Programka;
          begin
               ClrScr; Rewrite(tempfile);
               Writeln('Введите количество варинтов.');
               Readln(Kolvo_VariantovSt);
               if Length(Kolvo_VariantovSt)>10 then
                  begin
                       while KeyPressed do ReadKey;
                       Writeln('Слишком большое число.');
                       ReadKey;
                       Programka;
                  end;
                   Writeln(tempfile,Kolvo_Variantov);
                   Reset(tempfile);
                   for i:=1 to 10 do Read(tempfile,simvol[i]);
                   for i:=1 to 10 do
                       if (simvol[i]='0') OR (simvol[i]='1') OR (simvol[i]='2') OR
                          (simvol[i]='3') OR (simvol[i]='4') OR (simvol[i]='5') OR
                          (simvol[i]='6') OR (simvol[i]='7') OR (simvol[i]='8') OR
                          (simvol[i]='9') then Break
                                          else
                                          begin
                                               while KeyPressed do ReadKey;
                                               Writeln('Это не число.');
                                               ReadKey;
                                               Programka;
                                          end;
               Kolvo_Variantov:=0;
               for i:=1 to 10 do
                   begin
                        Val(simvol[i],tempp,error);
                        if i<>1 then for j:=1 to i do tempp:=tempp*10;
                        Kolvo_Variantov:=Kolvo_Variantov+tempp;
                   end;
               if Kolvo_Variantov<=0 then
                  begin
                       while KeyPressed do ReadKey;
                       Writeln('Вы ввели число, которым нельзя сказать кол-во предметов.');
                       ReadKey;
                       Programka;
                  end;
               Kolvo_Variantov:=Kolvo_Variantov-1;
               Kolvo_Variantov:=Random(Kolvo_Variantov);
               Writeln;
               Writeln('Выбор генератора случайных чисел: ',Kolvo_Variantov+1);
               Writeln('Еще?');
               err;
           end;
begin
     Randomize;
     Assign(Tempfile,'temp');
     Programka;
end.
Вложения
Тип файла: rar ВАРИАНТЫ.RAR (879 байт, 10 просмотров)

Последний раз редактировалось hon; 08.07.2011 в 18:37.
hon вне форума Ответить с цитированием
Старый 08.07.2011, 21:03   #2
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

Код:
        begin
                       while KeyPressed do ReadKey;
                       Writeln('Слишком большое число.');
                       ReadKey;
                       Programka;
                  end;
вот это что такое? судя по всему, на этом месте ваша программа и останавливается навсегда
а еще не совсем понятно, что сие чудо должно делать в принципе, можно условие не своими словами, а как там, откуда оно взято?
DimaTs вне форума Ответить с цитированием
Старый 13.07.2011, 13:31   #3
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

Цитата:
Сообщение от DimaTs Посмотреть сообщение
Код:
        begin
                       while KeyPressed do ReadKey;
                       Writeln('Слишком большое число.');
                       ReadKey;
                       Programka;
                  end;
вот это что такое? судя по всему, на этом месте ваша программа и останавливается навсегда
а еще не совсем понятно, что сие чудо должно делать в принципе, можно условие не своими словами, а как там, откуда оно взято?
У меня ошибка "Вы ввели число, которым нельзя сказать кол-во предметов" (то-есть 0 или меньше). А "Слишком большое число" нужно, т.к. Longint не безграничен.
hon вне форума Ответить с цитированием
Старый 14.07.2011, 10:50   #4
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

вот эта строчка
Код:
while KeyPressed do ReadKey;
вы имели ввиду считывать пока вводятся данные? он будет делать так: считывать пока нажата кнопка, т.е. этот момент просто будет пропущен
и вы таки можете пояснить условие задачи?)
DimaTs вне форума Ответить с цитированием
Старый 14.07.2011, 16:50   #5
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
Сообщение

Цитата:
вот эта строчка
Код:
while KeyPressed do ReadKey;
вы имели ввиду считывать пока вводятся данные? он будет делать так: считывать пока нажата кнопка, т.е. этот момент просто будет пропущен
После "while KeyPressed do ReadKey" тебуется нажатие клавиши. Если пользователь во время этого предыдущего процесса нажал клавишу, считается, что клавиша нажата. Оператор создан для избежания этого.

Цитата:
и вы таки можете пояснить условие задачи?)
Ещё раз. Предположим, вам пришло 3 SMS. Вы не знаете, какое открыть первым.
Вы открываете программу, пишете количество вариантов (3).
Программа читает число. Если оно>10 (макс. длина Longint), то пишется "Слишком большое число". Число записывается в файл. Далее — если число содержит не цифру, то пишется "Это не число". И если число<=0, то пишется ошибка.
hon вне форума Ответить с цитированием
Старый 14.07.2011, 17:23   #6
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

Код:
var
Vstr: string;
Vint,err: longint;
f: text;
begin
readln(Vstr);
if length(Vstr) > 10 then writeln('Слишком большое число') else
  begin
  val(Vstr,Vint,err);
  if err = 0 then
    begin
    assignfile(f,'file.txt');
    rewrite(f);
    write(f,Vstr);
    close(f);
    if Vint<0 then writeln('Ошибка')
    end else writeln('Это не число');
  end;
end.
вот собственно
DimaTs вне форума Ответить с цитированием
Старый 15.07.2011, 20:03   #7
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
Сообщение

Цитата:
Сообщение от DimaTs Посмотреть сообщение
Код:
var
Vstr: string;
Vint,err: longint;
f: text;
begin
readln(Vstr);
if length(Vstr) > 10 then writeln('Слишком большое число') else
  begin
  val(Vstr,Vint,err);
  if err = 0 then
    begin
    assignfile(f,'file.txt');
    rewrite(f);
    write(f,Vstr);
    close(f);
    if Vint<0 then writeln('Ошибка')
    end else writeln('Это не число');
  end;
end.
вот собственно
Не работает. Если можно, весь текст программы. Ошибка та же, а если написать буквы, то 2 ошибки.
hon вне форума Ответить с цитированием
Старый 15.07.2011, 20:27   #8
DimaTs
Пользователь
 
Регистрация: 14.04.2011
Сообщений: 60
По умолчанию

компилятор PascalABC, это полный текст

сам лично проверил, все как вы хотели, и две буквы и десять и на любом языке)
DimaTs вне форума Ответить с цитированием
Старый 16.07.2011, 13:43   #9
hon
Форумчанин
 
Регистрация: 08.06.2011
Сообщений: 693
По умолчанию

спасибо
hon вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Генерация перестановок vereney Паскаль, Turbo Pascal, PascalABC.NET 3 21.03.2011 21:04
генерация чисел nXs Общие вопросы Delphi 2 13.08.2010 11:39
Генерация массива ZORRO2005 Microsoft Office Excel 2 23.05.2010 23:47
Генерация имен Napste® PHP 8 07.05.2010 20:33
Генерация звука N!ckeL Общие вопросы Delphi 1 19.06.2008 09:19