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


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

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

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


Цитата(Insomnia @ 4.06.2011 3:38) *
Выводятся все послед-ти вкл. парные (11, 666 и т.п.) . Их надо исключить.

Да уж, повторы действительно наблюдаются.. Только не те, о которых ты говорил ))
Running "d:\...\pas\fp\fp110603_insomnia\fp110603_insomnia.exe "
введтие числа, из которых хотите получить последовательности
2
5
000
000
000
000
000
000
000
000



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


Новичок
*

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

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


 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.


исправил. теперь выводит что требуется, вкл. парные. надо, что бы включались только те варианты, в которых не будет парных чисел друг с другом. (т.е. 787 - вывести , а 788 - нет)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
DarkWishmaster
сообщение 4.06.2011 8:46
Сообщение #4


Бывалый
***

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

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


Цитата(Insomnia @ 4.06.2011 7:43) *



исправил. теперь выводит что требуется, вкл. парные. надо, что бы включались только те варианты, в которых не будет парных чисел друг с другом. (т.е. 787 - вывести , а 788 - нет)


Можно сделать функцию для числа:

Rprec:=0; m:=0;
while n<>0 do begin
r:=n mod 10;
if r<>Rprec then begin //нашли другое число
m:=0;
Rprec:=R;
end
else inc(m);
if m=2 then Parnoe:=True;
n:=n div 10;
end;


Или я не совсем понял что такое парное число.

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


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 
 К началу страницы 
+ Ответить 
Insomnia
сообщение 4.06.2011 19:03
Сообщение #6


Новичок
*

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

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


да. большое спасибо. разобрался
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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