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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2011, 01:07   #1
lola1990
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 18
По умолчанию Паскаль. Задачи целочисленной арифметики. Исправить ошибку(

Условие задачи
Подсчитать количество нечетных натуральных чисел, принадлежащих интервалу ( a , b ), у которых количество четных цифр равно заданному числу.
Ну кроме этого также вывести на экран эти числа.

Вот он мой код
Код:
procedure nechet(var a,b,kc,n:integer);
var kz,x,y,t:integer;
begin
 for t:=a+1 to b-1 do begin
  if (t>0)and(t>a)and(t<b)and(t mod 2 =1) then
    begin
    x:=t;
    while x>0 do
      begin
        kz:=0;
        y:=x mod 10;
        if (y mod 2) = 0 then
        kz:=kz+1;
        x:=x div 10;
      end;
    if kz=n then
  begin
    kc:=kc+1;
    writeln(t);
    end;
    end;
 end;
end;
var a,b,n,t,kc,x,y:integer;
begin
  writeln('введите a,b');
  readln(a,b);
  writeln('введите n');
  readln(n);
  kc:=0;
  nechet(a,b,kc,n);
  if kc=0 then
  writeln('таких чисел нет')
  else
  writeln('кол-во таких чисел=',kc);
end.
Итак, программа работает при n=1 идеально. Выводит количество таких чисел и сами числа. Но если мы введем отрезок от 0 до 1000 например и n=2, прога выведет, что таких чисел нет
Я всю голову сломала, не понимаю, почему она не пашет. Помогите пожалуйста!
lola1990 вне форума Ответить с цитированием
Старый 11.11.2011, 02:25   #2
lola1990
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 18
По умолчанию

помогите, прошу(
lola1990 вне форума Ответить с цитированием
Старый 11.11.2011, 02:44   #3
Костя КС
Пользователь
 
Аватар для Костя КС
 
Регистрация: 22.01.2008
Сообщений: 78
По умолчанию

Код:
//в объявлении процедур var пишется перед переменными, которые должны изменить значение после выполнения процедуры. 
procedure nechet(a,b:integer;var kc:integer;n:integer);
var kz,x,y,t:integer;
begin
 for t:=a+1 to b-1 do begin
  if (t>0)and(t>a)and(t<b)and(t mod 2 =1) then
    begin
    x:=t;
//обнуление kz нужно вынести из цикла while
     kz:=0;
    while x>0 do
      begin

        y:=x mod 10;
        if (y mod 2) = 0 then kz:=kz+1;
        x:=x div 10;
      end;
    if kz=n then
  begin
    kc:=kc+1;
    writeln(t);
    end;
    end;
 end;
end;
//в самой программе не нужно объявлять переменные, используемые внутри функции.
var a,b,n,kc:integer;
begin
  writeln('введите a,b');
  readln(a,b);
  writeln('введите n');
  readln(n);
  kc:=0;
  nechet(a,b,kc,n);
  if kc=0 then
  writeln('таких чисел нет')
  else
  writeln('кол-во таких чисел=',kc);
end.

Последний раз редактировалось Костя КС; 11.11.2011 в 03:02.
Костя КС вне форума Ответить с цитированием
Старый 11.11.2011, 03:04   #4
lola1990
Пользователь
 
Регистрация: 06.10.2011
Сообщений: 18
По умолчанию

большое просто огромное вам спасибо)
lola1990 вне форума Ответить с цитированием
Старый 11.11.2011, 03:10   #5
Костя КС
Пользователь
 
Аватар для Костя КС
 
Регистрация: 22.01.2008
Сообщений: 78
По умолчанию

Всегда рады. Обращайтесь.
Костя КС вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача целочисленной арифметики.Паскаль rasti92 Паскаль, Turbo Pascal, PascalABC.NET 4 28.10.2011 18:24
Турбо паскаль. Задачи целочисленной арифметики. Natochka Паскаль, Turbo Pascal, PascalABC.NET 3 25.02.2011 10:37
исправить ошибку,Паскаль Aidar9119 Помощь студентам 4 05.01.2011 17:55
Паскаль.Исправить ошибку! kikimka Помощь студентам 2 16.03.2010 08:17
исправить ошибку ..паскаль. qasw Помощь студентам 6 07.10.2009 20:33