Автор Тема: Программеры, помогите!  (Прочитано 716 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн #Master# Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3066
Программеры, помогите!
« : Декабря 20, 2010, 21:02:31 »
Программеры - помогите сделать лабу по паскалю!
На данный момент запарился на такой проге:
Ввести натуральные числа m и n. Как результат вывести все натуральные числа, которые меньше m, сумма цифр которых равняется n.
Всем спасибо!

Оффлайн maestro-anders

  • Частый посетитель
  • **
  • Сообщений: 116
Re: Программеры, помогите!
« Ответ #1 : Декабря 20, 2010, 22:09:52 »
Делаешь цикл от 0 до m, внутри которого сравниваешь сумму цифр счётчика с n, и если совпадает, то выводишь. А чтобы посчитать сумму цифр, внутри этого цикла можно организовать ещё один циклик, который будет делить с остатком значение счётчика на 10, и значения остатков будут суммироваться в какую-нибудь переменную, чтобы сравнить с n.

Оффлайн #Master# Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3066
Re: Программеры, помогите!
« Ответ #2 : Декабря 20, 2010, 22:48:34 »
Делаешь цикл от 0 до m, внутри которого сравниваешь сумму цифр счётчика с n, и если совпадает, то выводишь. А чтобы посчитать сумму цифр, внутри этого цикла можно организовать ещё один циклик, который будет делить с остатком значение счётчика на 10, и значения остатков будут суммироваться в какую-нибудь переменную, чтобы сравнить с n.
Спасибо, буду пробовать.

... и добавил:

Делаешь цикл от 0 до m, внутри которого сравниваешь сумму цифр счётчика с n, и если совпадает, то выводишь. А чтобы посчитать сумму цифр, внутри этого цикла можно организовать ещё один циклик, который будет делить с остатком значение счётчика на 10, и значения остатков будут суммироваться в какую-нибудь переменную, чтобы сравнить с n.
а если мы введем 3-х, 4-х значное число?

... и добавил:

Вот что у меня получилось, проверьте правильно ли:

Program lab_3;
uses crt;
var m,n:byte;
i:byte;
s:byte;
begin
clrscr;
write(' input m:'); readln(m);
write(' input n:'); readln(n);
for i:=(m-1) downto 0 do
begin
s:=0;
s:=(i div 100)+(i div 10 mod 10)+(i mod 10);
if s=n then
writeln(i);
readkey;
end.



« Последнее редактирование: Декабря 21, 2010, 00:37:59 от #Master# »

Оффлайн TheIngvar

  • Опытный
  • ****
  • Сообщений: 561
Re: Программеры, помогите!
« Ответ #3 : Декабря 21, 2010, 00:50:23 »
Еси честно не осилил. Неправильная какая то постановка задачи. Числа с массива или из файла, ручками или рэндомом?

Хз... Ну, попробуй вот так...







... и добавил:

Цитировать
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  Capacity = 10;
var
  F:array [0..Capacity] of integer;
  i,j,m,n:integer;

begin
  {for example}
  m := 4;
  n := 5;
  {for example}
  Randomize;
  for i := 0 to Capacity do F := Random(10);
  {output}
  Writeln('m='+IntToStr(m)+', n='+IntToStr(n));
  Writeln('Source array:');
  for i := 0 to Capacity do Writeln('['+IntToStr(i)+']='+IntToStr(F));
  {approximately}
  Writeln('');
  for i := 0 to Capacity do
    if F < m then
    Writeln('['+IntToStr(i)+']='+IntToStr(F)+'<'+IntToStr(m));
  Writeln('');
  for i := 0 to Capacity do
   for j := 0 to Capacity do
   begin
    if i = j then Break;
     if F+F[j] = n then
     Writeln('['+IntToStr(i)+']+['+IntToStr(j)+']='+IntToStr(n));
   end;
  ReadLn;
end
« Последнее редактирование: Декабря 21, 2010, 00:52:01 от TheIngvar »

Оффлайн maestro-anders

  • Частый посетитель
  • **
  • Сообщений: 116
Re: Программеры, помогите!
« Ответ #4 : Декабря 21, 2010, 13:02:30 »
TheIngvar, какой массив, какой рэндом?  :o Имеется два числа и всё. Ясен пень, что вводить их надо вручную.
#Master#, а чего цикл то сделал задом наперёд?  :)
Даже красивее будет сделать подпрограммку, которая в качестве параметра будет получать число, а возвращать сумму его цифр (погугли, скорей всего такие подпрограммки уже давно выложены где-нибудь),и просто вызывать её в цикле и сравнивать с N.

Оффлайн #Master# Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3066
Re: Программеры, помогите!
« Ответ #5 : Декабря 21, 2010, 13:40:02 »
TheIngvar, какой массив, какой рэндом?  :o Имеется два числа и всё. Ясен пень, что вводить их надо вручную.
#Master#, а чего цикл то сделал задом наперёд?  :)
Даже красивее будет сделать подпрограммку, которая в качестве параметра будет получать число, а возвращать сумму его цифр (погугли, скорей всего такие подпрограммки уже давно выложены где-нибудь),и просто вызывать её в цикле и сравнивать с N.
И правда задом на перед вышло ))
Но в принципе все верно?


Оффлайн maestro-anders

  • Частый посетитель
  • **
  • Сообщений: 116
Re: Программеры, помогите!
« Ответ #6 : Декабря 21, 2010, 14:30:07 »
Не хватает енда, закрывающего цикл, и эта строчка:
s:=(i div 100)+(i div 10 mod 10)+(i mod 10);
если она считает сумму цифр, то нормально (я просто не помню эти команды уже), но получается неуниверсально, она ж 5-значное число не обработает, поэтому предлагаю вместо неё написать подпрограммку.

Оффлайн #Master# Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3066
Re: Программеры, помогите!
« Ответ #7 : Декабря 21, 2010, 15:16:19 »
Цикл немного подправил и енд добавил ))

Program lab_3;
uses crt;
var m,n:byte;
i:byte;
s:byte;
begin
clrscr;
write(' input m:'); readln(m);
write(' input n:'); readln(n);
for i:=0 to m-1 do
begin
s:=0;
s:=(i div 100)+(i div 10 mod 10)+(i mod 10);
if s=n then
writeln(i);
end;
readkey;
end.
« Последнее редактирование: Декабря 21, 2010, 15:18:18 от #Master# »

Оффлайн maestro-anders

  • Частый посетитель
  • **
  • Сообщений: 116
Re: Программеры, помогите!
« Ответ #8 : Декабря 21, 2010, 15:31:42 »
Ну так проверяй, работает или нет  ;D

Оффлайн TheIngvar

  • Опытный
  • ****
  • Сообщений: 561
Re: Программеры, помогите!
« Ответ #9 : Декабря 21, 2010, 15:32:53 »
 :pozor: Аа...вот что недосып делает) Тут просто дан ряд натуральных чисел)) ыы... А я думал есть два числа эм и эн и с ними плясать от массива))) Накануне знакомой просто решал похожую задачу с массивами)

Оффлайн maestro-anders

  • Частый посетитель
  • **
  • Сообщений: 116
Re: Программеры, помогите!
« Ответ #10 : Декабря 21, 2010, 15:41:17 »
TheIngvar, я вначале тоже не очень въехал, задача показалась шибко сложной, но потом допёрло  :)

Оффлайн TheIngvar

  • Опытный
  • ****
  • Сообщений: 561
Re: Программеры, помогите!
« Ответ #11 : Декабря 21, 2010, 15:51:16 »
maestro-anders, А все потому что нужно больше спать)))))))))))

Оффлайн #Master# Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3066
Re: Программеры, помогите!
« Ответ #12 : Декабря 21, 2010, 20:43:49 »
Ну так проверяй, работает или нет  ;D
Работает ))

Оффлайн #Master# Автор темы

  • Ветеран форума
  • ******
  • Сообщений: 3066
Re: Программеры, помогите!
« Ответ #13 : Декабря 24, 2010, 00:45:04 »
решено и даже сдано )
« Последнее редактирование: Января 18, 2011, 01:21:00 от #Master# »