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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2009, 16:31   #1
xxxPascalxxx
Life:[### ]22%
Пользователь
 
Аватар для xxxPascalxxx
 
Регистрация: 15.12.2007
Сообщений: 48
Смущение Функция, Pascal

Здравствуйте. Не понимаю почему не выводит количество правильных чисел... Выводит только в том случае, если все числа правильные. Прошу помочь... Заранее спасибо.

Код:
function IsPrime(a:integer):boolean;
var j,p,l,b:integer;  s,m:real;
 begin
 if (a=2) or (a=3) then
 result:=true
 else
repeat
     begin
      p:=b mod 3;
      l:=b mod 2;
      if (p<>0) and (l<>0) then
      result:=true
      else
      result:=false;
       b:=b+1;
      end;
  until b=a+1;


 end;

var   x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,i:integer; k:boolean;
begin
i:=0;
write('1: ');
 read(x1);
write('2: ');
 read(x2);
write('3: ');
 read(x3);
 write('4: ');
 read(x4);
 write('5: ');
 read(x5);
 write('6: ');
 read(x6);
 write('7: ');
 read(x7);
 write('8: ');
 read(x8);
 write('9: ');
 read(x9);
 write('10: ');
 read(x10);

writeln('');

writeln('1: ',IsPrime(x1));
writeln('2: ',IsPrime(x2));
writeln('3: ',IsPrime(x3));
writeln('4: ',IsPrime(x4));
writeln('5: ',IsPrime(x5));
writeln('6: ',IsPrime(x6));
writeln('7: ',IsPrime(x7));
writeln('8: ',IsPrime(x8));
writeln('9: ',IsPrime(x9));
writeln('10: ',IsPrime(x10));


  if IsPrime(x1)=true then
 i:=i+1;
  if IsPrime(x2)=true then
 i:=i+1;
  if IsPrime(x3)=true then
 i:=i+1;
  if IsPrime(x4)=true then
 i:=i+1;
  if IsPrime(x5)=true then
 i:=i+1;
  if IsPrime(x6)=true then
 i:=i+1;
  if IsPrime(x7)=true then
 i:=i+1;
  if IsPrime(x8)=true then
 i:=i+1;
  if IsPrime(x9)=true then
 i:=i+1;
  if IsPrime(x10)=true then
 i:=i+1;

 writeln('Kol-vo prostih chisel ',i);

readln;
readln;
end.
My Life v1.0b ERROR: health.dll not found
xxxPascalxxx вне форума Ответить с цитированием
Старый 17.01.2009, 16:46   #2
Aristarh Dark
Форумчанин
 
Регистрация: 07.08.2007
Сообщений: 154
По умолчанию

Значит по порядку:
Функция IsPrime работает скорее всего неверно потому что на входе в repeat цикл переменная b не инициализируется.
Основное тело программы, ИМХО, разумнее записать так:
Код:
...
var
  Counter,i,x:integer;
begin
  Counter:=0;
  for i:=1 to 10 do
  begin
    WriteLn(i,':');
    ReadLn(x);
    if IsPrime(x) then
      begin
        inc(Counter);
        WriteLn('good');
      end;
  end;
  WriteLn('Amount:', Counter);
end
Aristarh Dark вне форума Ответить с цитированием
Старый 17.01.2009, 16:56   #3
xxxPascalxxx
Life:[### ]22%
Пользователь
 
Аватар для xxxPascalxxx
 
Регистрация: 15.12.2007
Сообщений: 48
По умолчанию

На мой взгляд вся проблема находится в этом месте
Код:
  if IsPrime(x1)=true then
 i:=i+1;
  if IsPrime(x2)=true then
 i:=i+1;
  if IsPrime(x3)=true then
 i:=i+1;
  if IsPrime(x4)=true then
 i:=i+1;
  if IsPrime(x5)=true then
 i:=i+1;
  if IsPrime(x6)=true then
 i:=i+1;
  if IsPrime(x7)=true then
 i:=i+1;
  if IsPrime(x8)=true then
 i:=i+1;
  if IsPrime(x9)=true then
 i:=i+1;
  if IsPrime(x10)=true then
 i:=i+1;
ведь в это месте идёт подсчёт чисел, так то функция всё выводит правильно, true если число правильное. Если все 10 чисел true, то ответ 10 цифр, если же хоть однин False то не считает...
My Life v1.0b ERROR: health.dll not found
xxxPascalxxx вне форума Ответить с цитированием
Старый 17.01.2009, 17:01   #4
xxxPascalxxx
Life:[### ]22%
Пользователь
 
Аватар для xxxPascalxxx
 
Регистрация: 15.12.2007
Сообщений: 48
По умолчанию

Прошу прощенья, действительно, дело было в функции...
Цикл совершенно лишний. Спасибо.
Код:
function IsPrime(a:integer):boolean;
var j,p,l:integer;  s,m:real;
 begin
 if (a=2) or (a=3) then
 result:=true
 else
 begin
      p:=a mod 3;
      l:=a mod 2;
      if (p<>0) and (l<>0) then
      result:=true
      else
      result:=false;
      end;
   end;
My Life v1.0b ERROR: health.dll not found
xxxPascalxxx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод кода из Pascal в Object Pascal zemskov77 Общие вопросы Delphi 1 03.01.2009 09:37
Функция в VB asd48 Помощь студентам 1 25.12.2008 23:29
Функция Lemo Помощь студентам 1 02.12.2008 00:24
Функция в c++ JOFRIF Помощь студентам 1 08.05.2008 18:30
одна функция потока, а другая функция - член класса запускающего этот поток Дмитрий_Ч Общие вопросы C/C++ 2 27.09.2007 08:50