IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Задача Паскаль АБС, Напишите программу, выводящую все трехзначные номера (от 001 до 999),
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Здравствуйте! Напишите программу, выводящую все трехзначные номера (от 001 до
999), сумма цифр которых равна N (значение N вводит пользователь).

Мой код-
var i,a,b,c,w:integer;
n,p:string;
begin
writeln('Vvedite chislo ot 0 do 999: ');
readln(n);
begin
for i:=1 to 999 do
a:=i div 100;
b:=i div 10 mod 10;
c:=i mod 10;
w:=a+b+c;
p:=IntToStr(w);
if p=n then writeln(p,' ');
end;
end.


И еще один -
uses crt;
var n,i,a,b,c,w,k:integer;
s:string;
begin
write('Сумма цифр n=');
readln(n);
writeln('Номера с суммой цифр, равной ',n);
k:=0;
for i:=1 to 999 do
begin
a:=i div 100;
b:=i div 10 mod 10;
c:=i mod 10;
w:=a+b+c;
if w=n then
begin
k:=1;
str(i,s);//чтобы на всех Паскалях шло
//s:=IntToStr(i); //для АВС
if i<10 then s:='00'+s
else if i in [10..99] then s:='0'+s;
write(s:4);
end;
end;
if k=0 then write('Таких номеров нет')
end.


Почему то не выводит все номера)))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

Репутация: -  627  +


Цитата
//чтобы на всех Паскалях шло
- проще всего сделать так:
      if n=w then
begin
if a = 0 then write(0); // Первая цифра - 0? Выводим этот 0...
if (a + b = 0) then write(0); // Первая И ВТОРАЯ - нули: добавляем еще один 0
writeln(i,' '); // А потом уже выводим само число...
end;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(IUnknown @ 8.09.2011 12:45) *
- проще всего сделать так:
      if n=w then
begin
if a = 0 then write(0); // Первая цифра - 0? Выводим этот 0...
if (a + b = 0) then write(0); // Первая И ВТОРАЯ - нули: добавляем еще один 0
writeln(i,' '); // А потом уже выводим само число...
end;

IUnknown, что-то это не похоже на тебя.. Не выспался? ))
Почему не так:
      WriteLn(a,b,c);
- ? smile.gif

2 liverpool85:
Не забывай инициализировать переменные - я имею в виду k в данном случае. Кстати, лучше ее сделать типа boolean, раз уж на используется для проверки.
Переменная w - абсолютно лишняя, сумму можно находить прямо в if.
Все числовые параметры задавай константами. Например:
const
n1= 1;
n2= 999;
...
for i:=n1 to n2 do ...

И совет: по возможности избегай слова "таких" в выводе результатов. Пиши полностью, не ленись:
WriteLn('Чисел с суммой цифр ',n,' в диапазоне от ',n1,' до ',n2,' не найдено');

Иначе ты запустишь эту прогу через неделю, и ни фига не поймешь, что это она такое сделала )). И твой преп тебе скажет спасибо - у него много студентов, много групп, много вариантов. Ему проще, когда видно, что делает прога.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Спасибо за дельные советы!!
Подправил малость

const
n1=1;
n2=999;
var
n, i, a, b, c: integer;
s: string;
k: boolean;
begin
writeln('Vvedite chislo ot 0 do 27: ');
readln(n);

for i:=n1 to n2 do
begin
a:=i div 100;
b:=i div 10 mod 10;
c:=i mod 10;
if n=a+b+c then
begin
k:=true;
str(i,s);
if i<10 then s:='00'+s
else if i in [10..99] then s:='0'+s;
writeln(s:4,' ');
end;
end;
if k=false then write ('Chisel s summoj zifr ',n,' v diapazone ot ',n1,' do ',n2,' net');
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(liverpool85 @ 9.09.2011 22:27) *
Подправил малость

Однако, приятно, когда советы не игнорируются! Тогда пойдем до конца )).
Я тоже подправил, смотри комментарии по тексту.
const
n1=1; { сдвигай! }
n2=999;
var
n, i, a, b, c: integer;
{ s не нужна, убери
s: string; }
k: boolean;
begin
{ я бы убрал диапазон.. ну, выдаст, что нет таких - что такого? это тоже результат }
{ вставил "целое" }
writeln('Vvedite celoe chislo ot 0 do 27: ');
readln(n);
k:= false; { обязательно инициализируй! не полагайся на компилятор }
for i:=n1 to n2 do begin
a:= i div 100;
b:= i div 10 mod 10;
c:= i mod 10;
if n=a+b+c then begin { привыкай ставить begin в конце строки, если преп не против )) }
k:=true; { после begin - сдвигать, однозначно}
WriteLn(a,b,c) { не нужно никаких ухищрений, у тебя же уже есть цифры (см. мой коммент на пост IUnknown) }
end; { end стоит точно в той позиции, где начинается строка с begin }
end;
{ не k=false, а not k }
if not k then write ('Chisel s summoj zifr ',n,' v diapazone ot ',n1,' do ',n2,' net');
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
liverpool85   Задача Паскаль АБС   8.09.2011 14:24
IUnknown   Во-первых, не надо вводить число от 0 до 999 (я о …   8.09.2011 14:45
liverpool85   Упс, а нужно выводить не 1,2,3 а 001,002,003!…   8.09.2011 15:39
liverpool85   :good: Спасибо тебе огромное! Задачи делал сег…   8.09.2011 14:55
IUnknown   - проще всего сделать так: if n=w then …   8.09.2011 15:45
Lapp   - проще всего сделать так: [code=pas] if n=w …   9.09.2011 4:39
liverpool85   Спасибо за дельные советы!! Подправил мало…   10.09.2011 1:27
Lapp   Подправил малость Однако, приятно, когда советы не…   10.09.2011 4:32
Гость   Спасибо за дельные советы!! Подправил мал…   24.05.2013 18:41
liverpool85   var k, n, i, a, b, c, w: integer; s: string;…   8.09.2011 15:48
IUnknown   Таких не просто "нет", их "быть не …   10.09.2011 13:13
-Lapp-   Таких не просто "нет", их "быть не …   10.09.2011 16:30
liverpool85   Если делать согласно последнему комменту, то отпад…   10.09.2011 15:51
sheka   А это еще почему?   10.09.2011 17:30
Lapp   А это еще почему?лучше 1 раз попробовать, чем 10 р…   11.09.2011 4:46
-TarasBer-   Потому что если строка начинается с ключевого слов…   10.09.2011 19:55
liverpool85   Потому что если строка начинается с ключевого сло…   10.09.2011 20:53
volvo877   Пробовали. Вернулись к варианту исходников VCL, то…   11.09.2011 5:27
liverpool85   Огромное спасибо всем!   11.09.2011 13:19


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 13.09.2025 13:25
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name