Pseudokod przeniesienie na C++

Pseudokod przeniesienie na C++
XE
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 14
0

Witam,
Dostałem zadanie aby wygenerować plik tekstowy, który zawiera wszystkie k-elementowe podzbiory zbioru {1,...,n} w porządku leksykograficznym.

mam następujący pseudokod do zamiany na kod w C++, prezentuje on się następująco:

Kopiuj
begin
       for i:=1 to k do A[i] := i; (*pierwszy pozdbiór*)
       p:=k;
       while p>=1 do
               begin write (A[1],...,A[k]);
                       if A[k] = n then p:=p-1; else p:=k;
                       if p>=1 then
                              for i:=k downto p do A[i] := A[p] + i - p + 1;
      end
end

Zrobiłem coś takiego, niestety nie działa tak jak powinien. (zapis do pliku pominięty)

Kopiuj
#include <iostream>
#include <fstream>

using namespace std;

int main()
{
	int n, k;
	cin >> n;
	do
	{
		cin >> k;
	} while (k > n); 
	
	int *tab = new int[k];
	int p = k;
	for (int i = 1; i <= k; i++)
	{
		tab[i - 1] = i;
		cout << tab[i - 1] << endl;
	}
			do
			{
				cout << tab[k-1];
				if (tab[k-1] == n)
				{
					p = p - 1;
				}
				else
				{
					p = k;
				}
				if (p >= 1)
				{
					for (int i = k; k>p; i--)
					{
						tab[i-1] = tab[p-1] + i - p + 1;
					}
				}
			} while (p >= 1);

	
	getchar();
	getchar();
	return 0;
} 
kaczus
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Łódź
  • Postów: 1403
0

for i:=k downto p do A[i] := A[p] + i - p + 1;
to nie jest

Kopiuj
for (int i = k; k>p; i--)
                    {
                        tab[i-1] = tab[p-1] + i - p + 1;
                    } 

warunek w for jest bez sensu.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
1
Kopiuj
cin >> n;
do
{
    cin >> k;
} while (k > n); 
 
int *tab = new int[k];

  1. Wczytujesz liczby do k, a potem je wyrzucasz.

  2. Co ten warunek zakończenia ma znaczyć?

  3. A potem tworzysz tablicę wielkości k

  4. Popraw wcięcia: http://format.krzaq.cc/

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.