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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2008, 17:59   #1
Panda
Пользователь
 
Регистрация: 17.06.2008
Сообщений: 24
По умолчанию Проверка ввода

Почему то проверка ввода не работает, не могу понять в чём причина?
Код:
uses crt;
const n=6;
var a:array[1..n] of integer;
    i,min,mn,j,k:integer;
     procedure vvod(var t:integer;a,b:word);
var
x,y,code:integer;
l:string;
flag:boolean;
begin
x:=wherex;
y:=wherey;
repeat
flag:=true;
readln(l);
val(l,t,code);
if (code<>0) or (not(t>a)) or (not(t<b)) then
begin
gotoxy(x,y);
clreol;
write('error');
delay(1000);
gotoxy(x,y);
clreol;
flag:=false;
end;
until flag=true;
end;
begin

clrscr;
writeln('Ishodnyj massiv:');
writeln('Vvedite v stroku s probelom ',n,' chisel:');
           vvod(i,10,1000);
for i:=1 to n do
read(a[i]); //ââîäèì äàííûå
readln;
clrscr;
writeln('Ishodnyj massiv:');
for i:=1 to n do
write(a[i],' ');  //âûâîäèì ìàññèâ
writeln;
min:=a[1];  //íàõîäèì ìèíèìàëüíîå ÷èñëî â ìàññèâå
for i:=1 to n do
if a[i]<min then min:=a[i];
for j:=min downto 2 do //äåëèì âñå ÷èñëà ìàññèâà ñíà÷àëà íà ìèíèìàëüíîå
   begin                      //ïîòîì óìåíüøàåì íà 1
    k:=0;
    for i:=1 to n do
    if a[i] mod j=0 then
       begin
         k:=k+1;
       end;
    if k=n then //êàê òîëüêî íàõîäèì ÷èñëî íà êîòîðîå äåëÿòñÿ âñå ÷èñëà
       begin
        mn:=j; //ýòî ìàêñèìàëüíûé ìíîæèòåëü
        break; //âûõîäèì èç öèêëà
       end;
   end;
if mn=1 then
   begin
      writeln('Obshego mnozitelja net!');
      readln;
      exit;
  end;
writeln;
writeln('Sokrashennyj massiv:');
for i:=1 to n do
write(a[i] div mn,' ');//âûâîäèì ìàññèâ, äåëåííûé íà ìíîæèòåëü
write('|',mn);//âûâîäèì ïàëêó è ìíîæèòåëü
readln
end.
Panda вне форума Ответить с цитированием
Старый 08.07.2008, 18:59   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Вот исправил ошибки с твоей проверкой, не понимаешь, не списывай откуда попало, а если списал правильно пользуйся.
Код:
uses crt;
const n=6;
var a:array[1..n] of integer;
    i,min,mn,j,k:integer;
procedure vvod(var t:integer;a,b:word);
var
x,y,code:integer;
flag:boolean;
begin
x:=wherex;
y:=wherey;
repeat
flag:=true;
readln(t);
if(t<=a) or (t>=b) then
begin
gotoxy(x,y);
clreol;
write('error');
delay(1000);
gotoxy(x,y);
clreol;
flag:=false;
end;
until flag=true;
end;
begin
clrscr;
writeln('Vvedite ',n,' chisel:');
for i:=1 to n do
vvod(a[i],10,1000);
clrscr;
writeln('Ishodnyj massiv:');
for i:=1 to n do
write(a[i],' ');  
writeln;
min:=a[1];  
for i:=1 to n do
if a[i]<min then min:=a[i];
for j:=min downto 2 do
   begin                     
    k:=0;
    for i:=1 to n do
    if a[i] mod j=0 then
       begin
         k:=k+1;
       end;
    if k=n then 
       begin
        mn:=j; 
        break; 
       end;
   end;
if mn=1 then
   begin
      writeln('Obshego mnozitelja net!');
      readln;
      exit;
  end;
writeln;
writeln('Sokrashennyj massiv:');
for i:=1 to n do
write(a[i] div mn,' ');
write('|',mn);
readln
end.
puporev вне форума Ответить с цитированием
Старый 08.07.2008, 19:23   #3
Panda
Пользователь
 
Регистрация: 17.06.2008
Сообщений: 24
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Вот исправил ошибки с твоей проверкой, не понимаешь, не списывай откуда попало, а если списал правильно пользуйся.
Код:
uses crt;
const n=6;
var a:array[1..n] of integer;
    i,min,mn,j,k:integer;
procedure vvod(var t:integer;a,b:word);
var
x,y,code:integer;
flag:boolean;
begin
x:=wherex;
y:=wherey;
repeat
flag:=true;
readln(t);
if(t<=a) or (t>=b) then
begin
gotoxy(x,y);
clreol;
write('error');
delay(1000);
gotoxy(x,y);
clreol;
flag:=false;
end;
until flag=true;
end;
begin
clrscr;
writeln('Vvedite ',n,' chisel:');
for i:=1 to n do
vvod(a[i],10,1000);
clrscr;
writeln('Ishodnyj massiv:');
for i:=1 to n do
write(a[i],' ');  
writeln;
min:=a[1];  
for i:=1 to n do
if a[i]<min then min:=a[i];
for j:=min downto 2 do
   begin                     
    k:=0;
    for i:=1 to n do
    if a[i] mod j=0 then
       begin
         k:=k+1;
       end;
    if k=n then 
       begin
        mn:=j; 
        break; 
       end;
   end;
if mn=1 then
   begin
      writeln('Obshego mnozitelja net!');
      readln;
      exit;
  end;
writeln;
writeln('Sokrashennyj massiv:');
for i:=1 to n do
write(a[i] div mn,' ');
write('|',mn);
readln
end.
Спасибо!
Что сделаешь если препод такую проверку дал!
Panda вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка правильности ввода символов LLIypLLIyH Помощь студентам 7 22.07.2008 19:30
Блокировка ввода Fantom Общие вопросы Delphi 3 12.05.2008 19:34
Перегрузка ввода MaTBeu Общие вопросы C/C++ 9 23.12.2007 16:22
проверка ввода данных в форму @Simpson JavaScript, Ajax 1 12.11.2007 02:17
Проверка ввода символов Raz0r Помощь студентам 2 06.11.2007 14:16