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

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

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

> вывести последовательности длины n
Insomnia
сообщение 4.06.2011 2:38
Сообщение #1


Новичок
*

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

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


Напечатать по 1 разу все последовательности длины n , состоящие из чисел 1..k . Их кол-во находится как k^n.

program nposledov;

{$APPTYPE CONSOLE}

uses
SysUtils,windows;
const n=3;
k=2;
type
TElem=integer;
TArr=array[1..n] of TElem;
TPrr=array[1..k] of TElem;
var
j,i,p: TElem;
Arr: TArr;
Prr: TPrr;

procedure nposled (var Ar:TArr; Pr: TPrr; p: TElem);
var i,j: integer;
begin
if p=n then begin
for i:=1 to n do begin
write(Arr[i])
end;
writeln

end
else begin
for j:=1 to k do begin
p:=p+1;
Ar[p]:=Ar[j];
nposled(Ar,Pr,p);
p:=p-1;
end;
end
end;

begin
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
p:=0;
writeln('введтие числа, из которых хотите получить последовательности');
for j:=1 to k do
readln(Prr[j]);
nposled(Arr,Prr,p);
readln
end.


Выводятся все послед-ти вкл. парные (11, 666 и т.п.) . Их надо исключить. Не могу понять как это сделать. подскажите пожалуйста.
да и код, чувствуется, очень грязный и неккоректный.

М
Просьба использовать правильные теги.
Исправлено

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


a.k.a. volvo877
*****

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

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


Цитата
исправил. теперь выводит что требуется, вкл. парные.
Что-то не видно. Выводится все так же 8 троек нулей.

Добавлено через 12 мин.
P.S. А вот так:
procedure nposled (var Ar:TArr; Pr: TPrr; p: TElem);
var i, j: integer;
begin
if p=n then
begin
for i := 1 to n - 1 do
if ar[i] = ar[i+1] then exit;
for i:=1 to n do
begin
write(Ar[i]) // Да, здесь именно AR, а не ARR, как было у тебя
end;
writeln
end
else
begin
for j:=1 to k do
begin
p:=p+1;
Ar[p]:=pr[j]; // Да, здесь именно PR справа, а не AR как было у тебя
nposled(Ar,Pr,p);
p:=p-1;
end;
end
end;
- выводит то, что требуется: ввожу 7 и 8, получаю
787
878
Это требовалось?

Сообщение отредактировано: IUnknown - 4.06.2011 10:46
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



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