Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2016, 13:07   #1
jvtmad
 
Регистрация: 23.03.2016
Сообщений: 5
По умолчанию Вывод комбинаций на экран или в фаил

Доброго. Требуется найти все комбинации 2-х множеств по 8 одинаковых элементов и вывести их на экран или в файл. Например имеем восемь "1" и восемь "0" и должны получить строки вида:
11110000 11101000 10110100 и т.д. Т.е по формуле 12870 разных наборов.
Язык не указывал т.к не знаю на чём это удобнее реализовать.
jvtmad вне форума Ответить с цитированием
Старый 23.03.2016, 13:20   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

http://www.aconnect.de/friends/editi...oricode_e.html
http://rosettacode.org/wiki/Combinations#C
p51x вне форума Ответить с цитированием
Старый 23.03.2016, 14:04   #3
jvtmad
 
Регистрация: 23.03.2016
Сообщений: 5
По умолчанию

немного ошибся с выводом. Комбинации должны быть составлены из всех 16-ти элементов по 8 из каждого множества. Меняться будут только их места.
jvtmad вне форума Ответить с цитированием
Старый 23.03.2016, 14:52   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Код:
r1:='11111111';
r2:='00000000';
c1:=0; for j:=1 to length(r1) do if r1[j]='1' then c1:=c1+1;
c2:=0; for j:=1 to length(r2) do if r2[j]='1' then c2:=c2+1;

rfirst:='0000000000000000';
for j:=1 to c1+c2 do rfirst[j]:='1'; 
rlast:='1111111111111111';
for j:=1 to length(rlast)-c1-c2 do rlast[j]:='0';

repeat
  Writeln(rfirst);

  nextexist:=false;
  for j:=length(rfirst) downto 2 do begin
    if rfirst[j-1]='1' and rfirst[j]='0' and  {='10'} then begin
      rfirst[j-1]:='0'; rfirst[j]:='1'; {:='01'}
      nextexist:=true;
      break; 
    end;
  end;
until (rfirst=rlast);
until (nextexist);
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 23.03.2016 в 14:58.
evg_m на форуме Ответить с цитированием
Старый 23.03.2016, 15:39   #5
jvtmad
 
Регистрация: 23.03.2016
Сообщений: 5
По умолчанию

я так понял она считает комбинации начиная с 0000000000000000 а нужно чтобы было 8 единиц и 8 нулей всегда в каждой комбинации
jvtmad вне форума Ответить с цитированием
Старый 23.03.2016, 16:52   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

Цитата:
я так понял она считает комбинации начиная с 0000000000000000
c1:=0; for j:=1 to length(r1) do if r1[j]='1' then c1:=c1+1; //СЧИТАЕМ количество единиц в ПЕРВОЙ

for j:=1 to c1+c2 do rfirst[j]:='1'; // ДЕЛАЕМ НУЖНОЕ количество единиц
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 23.03.2016, 16:54   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

тыц

вот переделанный код (исходник по ссылке выше)
Код:
Program perestanovka;
const MaxN = 17;
var
  A: Array[1 .. MaxN] Of Byte;
  N, i, j, k: Byte;

Procedure Output;
var i: Byte;
begin
  For i := 1 to N do
  Write(A[i], ' ');
  Writeln;
end;

Procedure Change(i, k: Longint);
var x: Byte;
begin
  x:= A[i];
  A[i] := A[k];
  A[k] := x;
end;

begin
  N := 16;
  For i := 1 to N div 2 do A[i]:=0;
  For i := (N div 2)+1 to N do A[i]:=1;

  WriteLn;
  
  While True Do
  Begin
    Output;
    i:= N;
    While (i > 0) and (A[i] >= A[i + 1]) do
    Dec(i);
    If i = 0 then Break;
    For j := i + 1 To N Do
    If (A[j] > A[i]) then
      k := j;
    Change(i, k);
    Inc(i);
    j := N;
    While (i < j) do
    Begin
      Change(i, j);
      Inc(i);
      Dec(j);
    end;
  end;
  readln;
end.

Последний раз редактировалось Serge_Bliznykov; 23.03.2016 в 17:05.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.03.2016, 14:40   #8
jvtmad
 
Регистрация: 23.03.2016
Сообщений: 5
По умолчанию

Serge благодарю. одна только проблема не могу всё в выводе просмотреть. можно ли добавить записи в текстовый файл?
jvtmad вне форума Ответить с цитированием
Старый 24.03.2016, 14:44   #9
jvtmad
 
Регистрация: 23.03.2016
Сообщений: 5
По умолчанию

просто на экране я вижу только последние комбинации
jvtmad вне форума Ответить с цитированием
Старый 27.03.2016, 12:51   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
просто на экране я вижу только последние комбинации
Какой Паскаль? в чём запускаете?
ЕXE-шник есть?
если есть, то можно банально написать в командной строке
Код:
ВашФайл.EXE > текстовый.txt
Если нет, тогда можно переопределить вывод в текстовый файл в самой программе.
если что, подскажу как...
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Dev C++ вывод на экран italic или bold BigDaddy Помощь студентам 0 21.03.2013 16:28
Текст вводится из текстового файла произвольной длины; вывод результатов на экран, принтер или в файл kestugar Помощь студентам 1 29.03.2011 19:09
матрица, и вывод из\в фаил mego4el Помощь студентам 9 14.12.2010 22:11
вывод на экран информации о маршрутах, начинающихся или кончающихся в пункте Sergeo_89 Паскаль, Turbo Pascal, PascalABC.NET 4 07.12.2008 21:00
быстрый вывод карты на экран или попиксельное создание бмп angel2c Общие вопросы C/C++ 2 17.12.2007 10:50