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

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

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

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

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

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

Доброго времени суток. Нужна ваша небольшая помощь с процедурой. Условие задачи:

Среди натуральных чисел из интервала [a;b] числа больше 100, найти те, у которых сумма первой и последней цифры равна введенному числу k. Вот мой код:

Код:
program Noname2;
 var a,b,i,k,s:integer;
 procedure interval(c3,c2,c1:integer);
 begin
 while i>100 do
 c3:=i mod 10;
 c2:=i mod 10 div 10;
 c1:=i div 100;
 s:=c3+c1;
 end;
begin
readln(a,b);
readln(k);
for i:=a to b do
 if s=k then
 writeln(i);
end.
По идее делаю все правильно и должно работать, но почему-то идет. Был бы очень благодарен, если кто-нибудь смог исправить ее или может быть вы можете предложить свой вариант решения задачи.
maxwel6064 вне форума Ответить с цитированием
Старый 19.11.2011, 18:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
 procedure valid(n,k:integer);
 var s:string;q,w,e:integer;
 begin
  str(n,s);val(s[1],q,e);val(s[Length(s)],w,e);
  if (q+w)=k then число n подходит
 end;
Идея понятна? - преобразовать число в строку и работать с его цифрами как с элементами массива
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.11.2011, 10:46   #3
maxwel6064
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 28
По умолчанию

Stilet, данный вариант мне к сожалению не подходит, т.к нужно использовать массивы и переменный string типа, только integer..
maxwel6064 вне форума Ответить с цитированием
Старый 20.11.2011, 11:24   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Код:
begin
readln(a,b);
readln(k);
for i:=a to b do
 if s=k then
 writeln(i);
end.
а где вызов процедуры interval?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 20.11.2011, 13:13   #5
maxwel6064
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 28
По умолчанию

evg_m, это нужно сделать так: interval()? Прощу прощения за очень глупые вопросы, просто в первый раз делаю программу с использованием функции.
maxwel6064 вне форума Ответить с цитированием
Старый 20.11.2011, 13:38   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
for i:=a to b do BEGIN
 interval(c1, c2, c3); 
 if s=k then
 writeln(i);
END;
end.
переделал вашу процедуру в функцию и ввел локальные переменные.
в коде функции убрал некоторые строки. причина такого в комментариях.

Код:
program Noname2;

function interval(val; integer): boolean;
 var c1 {, c2}, c3: integer;
begin
// while val>100 do очень вредная ЗДЕСЬ строчка (будет бесконечный цикл)
 c3:=val mod 10;
// c2:=val mod 10 div 10; бесполезная ЗДЕСЬ строчка (с2 нам нигде не нужно)
 c1:=val div 100;
 interval:=c3+c1; //получаем результат работы (сумма первой и последней цифр)
//  функция будет работать верно только для трехзначных чисел
end;

var
 a, b, k, i: integer;
begin
readln(a,b);
readln(k);
for i:=a to b do
// как использовать нашу функцию
 if interval(i)=k then //сравниваем результат функции с числом 
 writeln(i);
end;
окончательный код не тестировал.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 20.11.2011 в 13:49.
evg_m вне форума Ответить с цитированием
Старый 20.11.2011, 13:55   #7
maxwel6064
Пользователь
 
Регистрация: 24.03.2011
Сообщений: 28
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
for i:=a to b do BEGIN
 interval(c1, c2, c3); 
 if s=k then
 writeln(i);
END;
end.
переделал вашу процедуру в функцию и ввел локальные переменные.
в коде функции убрал некоторые строки. причина такого в комментариях.

Код:
program Noname2;

function interval(val; integer): boolean;
 var c1 {, c2}, c3: integer;
begin
// while val>100 do очень вредная ЗДЕСЬ строчка (будет бесконечный цикл)
 c3:=val mod 10;
// c2:=val mod 10 div 10; бесполезная ЗДЕСЬ строчка (с2 нам нигде не нужно)
 c1:=val div 100;
 interval:=c3+c1; //получаем результат работы (сумма первой и последней цифр)
//  функция будет работать верно только для трехзначных чисел
end;

var
 a, b, k, i: integer;
begin
readln(a,b);
readln(k);
for i:=a to b do
// как использовать нашу функцию
 if interval(i)=k then //сравниваем результат функции с числом 
 writeln(i);
end;
окончательный код не тестировал.

А возможно ли это сделать с использованием процедуры? Просто сейчас проходим процедуру, поэтому можно использовать только процедуру.
maxwel6064 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедура lavr9 Паскаль, Turbo Pascal, PascalABC.NET 0 30.05.2011 21:00
процедура Bat{CMD}_Men Общие вопросы Delphi 0 29.12.2010 06:41
Процедура romka90 Microsoft Office Access 3 17.05.2010 00:44
Процедура в процедура в C++ Builder Ecosasha C++ Builder 2 06.06.2009 17:17
Процедура honest Помощь студентам 0 08.05.2009 16:26