Obliczanie n-tego wiersza trójkąta Pascala

0

Witam.
Mam za zadanie napisać programy w języku c++ i javie, które będą obliczać n-t wiesz trójkąta paskala.

W javie poszło mi bez większych problemów, a w c++ ten sam kod źle mi liczy :( Nie wiem czemu:( W związku z czym proszę o pomoc :)

Kod w javie:

public class t {

	public static void main(String[] args) {
		int[] tab;
		int n=3;
		
		tab=new int[n+1];
	    tab[0]=1;

	    for (int i=0; i<n; i++) {
	        for (int j=i+1; j>0; j--) {
	        	tab[j]+=tab[j-1];		            
	        }
	    }
	    for(int i=0;i<tab.length;i++){
			System.out.println(tab[i]+" ");
		}
	}

}

oraz kod w c++:

#include <iostream>


using namespace std;

int main(){


    int *tab;
    int n = 3;
		tab = new int[n + 1];
        tab[0] = 1;

        for (int i = 0; i < n; i++){
            for (int j = i + 1; j > 0; j--){
                tab[j] += tab[j - 1];
            }
        }

        for(int i=0;i<n+1;i++){
            cout << tab[i] << " ";
        }



	return 0;
}
0
void PascalsTriangle(int n)
{
    int i, j, x, y, maxlen;
    string len;
    for(i = 0; i < n; i++) {
        x = 1;
        if(n % 2 != 0)
            len = string((n-i-1)*(n/2), ' ');
        else
            len = string((n-i-1)*((n/2)-1), ' ');
        cout << len;
        for(j = 0; j <= i; j++) {
            y = x;
            x = x * (i - j) / (j + 1);
            maxlen = numdigits(x);
            if(n % 2 == 0)
                cout << y << string(n - 2 - maxlen, ' ');
            else {
                cout << y << string(n - 1 - maxlen, ' ');
            }
        }
        cout << endl;
    } 
}

źródło
//edit:

cout << tab[i] << " ";

vs

System.out.println(tab[i]+" ");

Brakuje Ci zakańczania linii.

0

Ok trochę nie jasno wyznaczyłem bład :) Otóż dla przykładowego n = 3 w javie wyświetla mi się dobrze policzony n-ty wiersz 1,3,3,1 natomiast w c++ dostaję 1, i tu jakieś duże liczby ale też 4.

1

Coś kłamiesz:
Java: http://ideone.com/s3t05O

1
3
3
1

Cpp: http://ideone.com/LdWDfA

1
3
3
1

Problemem u Ciebie jest dodawanie do śmieci znajdujących się w tablicy.

0

Ja mam coś takiego :(

9b186bbb394de634.png

dodanie obrazka do treści i załączników posta - @furious programming

2

wychodizsz <ort>po za</ort> zakres tablicy

skoro tablica jest wielkosci N (wiec indeksy sa do N-1)
a i w przebiegu jest i < N
a J jest i + 1 to wychodzi na to ze J jest N wiec masz memleaka

no i jeszcze to co pisal SpartanPage... dodajesz smieci do tablicy dlatego tak Ci wyswietla. (poczytaj o inicjalizacji w c++ a w javie i czym sie roznia)

0

Nie bardzo czaję czemu się tak dzieję :( Rozwiązałem to pętlą, która ustawia na początku wszystkie wartości w tablicy na 0 ale nie bardzo mi się to podoba :( No chyba, że tak musi być :P

1

No chyba, że tak musi być :P

std::memset
std::fill
std::fil_n

lub zamiast tego stosowny kontener z parametrami mówiącymi o ilości elementów i ich stanie początkowym, np w std::vector

0
              t
             [30
            ]={1}
           ;main(n
          ,k,a, b){
         puts("1 ");
        for(;n<20;n++
       ){for(b=k=0;k<=
      n;){a=t[k];t[k]=a
     +b;b=a;printf("%d "
    ,t[k++]);}puts("");}} 

1 użytkowników online, w tym zalogowanych: 0, gości: 1