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

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

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

 
 Ответить  Открыть новую тему 
> Составить программу формирования массива, задача на процедуру(procedure)
сообщение
Сообщение #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 -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


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

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

Репутация: -  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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


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

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

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


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

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


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


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

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

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


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


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

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

 





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