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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2014, 15:13   #1
Adelia
Пользователь
 
Регистрация: 24.08.2014
Сообщений: 15
По умолчанию Помогите решить задачу с использованием процедур

Все,привет)Пожалуйста помогите разобраться с задачей.Задачу я решила,если можно так сказать,но у меня никак не получается убрать из цикла строчку: if r>0 then
writeln('Последовательность содержит число(a) кол-во разрядов которго(ых) равно сумме цифр,таких чисел : ',r) else
writeln('в последовательности не чисел,кол-во разрядов которых равно сумме их цифр ')

и сделать ее вне цикла,если ее убрать из цикла ,программа выдает ,что r=0.
вот условия самой задачи : Вводится последовательность целых чисел,0-конец последовательности.Определить ,содержит ли последовательность хотя бы одно число,сумма цифр в котором равна их количеству.При решении задачи создать процедуру которая возвращает сумму и кол-во цифр в числе.

Заранее спасибо за помощь)

Вот мое решение:
Код:
 
var b:integer;g,h,t,i,s:integer;r:byte;
    
procedure zifri(a:word;var r:byte;var n,k:integer);
var i:byte;s:integer;
  begin
  k:=a;n:=a;
  i:=0;s:=0;r:=0;
    while k<>0 do
     begin
      n:=k mod 10;
      i:=i+1;
      k:=k div 10;
      s:=s+n;
     end;
writeln('Разрядность числа  ',i);   
writeln('Сумма цифра в числе  ',s);
if i=s then r:=r+1;
  end;

begin
writeln('Введите количество элементов в последовательности');
readln(t); 
writeln('Введите последоватьльность,оканчивающийся нулём');
for i:=1 to t do
begin
readln(b);
zifri(b,r,g,h);
if r>0 then
writeln('Последовательность содержит число(a) кол-во разрядов которго(ых) равно сумме цифр,таких чисел : ',r) else
writeln('в последовательности не чисел,кол-во разрядов которых равно сумме их цивфр :(  ');
end;end.

Последний раз редактировалось Stilet; 24.08.2014 в 17:02.
Adelia вне форума Ответить с цитированием
Старый 24.08.2014, 16:53   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Не плохо было бы увидеть само задание..

И еще у Вас локальные и глобальные переменные перекрываются.. а это не хорошо..
Poma][a вне форума Ответить с цитированием
Старый 26.08.2014, 10:46   #3
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

По поводу оформления кода вообще почитайте про индентацию, в таком виде как Вы предоставили Ваш код трудно читаем.

По поводу самого кода, не понятно зачем вы инициализируете каждый раз 0 переменную r в процедуре zifri, вынесите начальную инициализацию r в тело программы, ну и соответственно тогда можно будет вынести за цикл указанный Вами кусок кода с выводом. Кроме того так как r глобальная переменная нет необходимости повторно объявлять её в процедуре zifri (имею в виду var r:byte), просто используйте её.

Т.е. как-то так:
Код:
var
   b:integer;
   g,h,t,i,s:integer;
   r:byte;
 
procedure zifri(a:word; var n,k:integer);
   var
      i:byte;
      s:integer;
   begin
      k:= a; 
      n:= a;
      i:= 0; 
      s:= 0;
      while k<>0 do
         begin
            n:= k mod 10;
            i:= i+1;
            k:= k div 10;
            s:= s+n;
         end;
      writeln('Разрядность числа  ',i);   
      writeln('Сумма цифра в числе  ',s);
      if i = s then 
         r:=r+1;
   end;

begin
   writeln('Введите количество элементов в последовательности');
   readln(t); 
   writeln('Введите последоватьльность,оканчивающийся нулём');
   for i:=1 to t do
      begin
         readln(b);
         zifri(b,r,g,h);			
      end;
   if r>0 then
      writeln('Последовательность содержит число(a) кол-во разрядов которго(ых) равно сумме цифр,таких чисел : ',r)
    else
      writeln('в последовательности не чисел,кол-во разрядов которых равно сумме их цивфр :(  ');	
end.

Последний раз редактировалось astecenko; 26.08.2014 в 10:55.
astecenko вне форума Ответить с цитированием
Старый 26.08.2014, 15:19   #4
Adelia
Пользователь
 
Регистрация: 24.08.2014
Сообщений: 15
По умолчанию Спасибо!

Спасибо за помощь и за советы)Теперь все получается)
Adelia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 0 02.11.2012 21:58
Организация программ с использованием процедур .использованием параметров-значений и параметров переменных Фрейтор 40-500 Помощь студентам 6 02.11.2012 21:46
Решить прорамму с использованием процедур. rooman90 Паскаль, Turbo Pascal, PascalABC.NET 0 14.05.2009 15:01
решить с использованием процедуры!помогите сделать. st1m Паскаль, Turbo Pascal, PascalABC.NET 1 01.04.2009 19:26
Помогите пожалуйста составить программку с использованием функций и процедур ЛесенОК Помощь студентам 1 17.02.2009 18:27