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

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

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

 
 Ответить  Открыть новую тему 
> Составить программу формирования массива, задача на процедуру(procedure)
unFair
сообщение 18.04.2005 19:58
Сообщение #1


Гость






Даны натуральные числа К и N. Составить программу формирования массива А, элементами которого являются числа, сумма цифр которых ровна K и которые не больше N.

вот мой код
uses crt;
var
 a:array[1..20] of integer;
 k,n:byte;
 i,x:integer;
 procedure abc(i:integer);
begin
end;
begin
 clrscr;
 writeln('vvedite k: '); readln(k);
 writeln('vvedite n: '); readln(n);
 for i:=1 to 100 do
    if (i=k) and (i<=n) then a[i]:=i
    else if (((i mod 10)+(i div 10))=k) and (((i mod 10) or (i div 10))<n) then a[i]:=I;
 for i:=1 to 100 do
    write(a[i], ' '); readln;
    writeln;
end.

На экран вывводится примерно след:
Цитата
введите к: 5
введите n: 10
0 0 0 5 0 0 0 0 0 0 0 0 14 0 0 0 0 0 0 2565....
т.е., понятное дело, совершенно не то, что нужно
ПС: Задача на процедуру, но я её только описал, т.к. не знаю что она должна делать в задаче.

Сообщение отредактировано: volvo - 27.11.2009 15:52
 К началу страницы 
+ Ответить 
Altair
сообщение 18.04.2005 20:31
Сообщение #2


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

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


Предлагаю алгоритм:
Function summz(n:integer):byte;
var result:byte;
begin
result:=0;
while n>0  do
begin
 inc(result,n mod 10);  n:=n div 10
end;
summz:=result;
end;

var
a:array[1..10] of integer;
i, ran, k,n:integer;
begin
randomize;
readln(k,n);
for i:=1 to 10 do
begin
 repeat
  ran:=random(n);
 until summz(ran)=k;
 a[ i ]:=ran;
end;
for i:=1 to 10 do write(a[ i ],' ');
end.


Обоснование:
При генерации чисел функция Random возвращает числа равномерно распределенные в интерале, следовательно за время T, мы получим знаение любое, если такое значениеможет существовать в необходимом интервале.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
GoodWind
сообщение 18.04.2005 20:38
Сообщение #3


Автооответчик
*****

Группа: Модераторы
Сообщений: 1 188
Пол: Мужской
Реальное имя: Александр

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


Цитата
inc(result,n mod 10);  n:=n div 10;

красивое решение


--------------------
Неадекватная чушь может быть адекватным ответом на неадекватный вопрос. Понятно или разжевать?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Altair
сообщение 18.04.2005 20:46
Сообщение #4


Ищущий истину
******

Группа: Модераторы
Сообщений: 4 824
Пол: Мужской
Реальное имя: Олег

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


Я последнее время стал неравнодушен к интереным конструкциям smile.gif
А насчет процедуры - unFair, алгоримт я показал, в процедуру что тебе надо сам загонишь!


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 21.07.2025 10:54
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"