Skocz do zawartości

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

zizou666

Problem z wyswietleniem tablic

Polecane posty

Mam pewnien prblem piszac program w C. Otoz program ma za zadanie zapisac do pliku w wybranych przeze mnie symbolach rownoleglobok lub trojkat. No i troche glupia sprawa bo rownoleglobok zrobilem, i mysle ze jest dobrze, ale mam taki glupi problem, jak wyswietlic ten rownoleglobok, zeby bylo widac, ze to rownoleglobok ;D Bo na razie wypisuje mi po kolei w jednej linii wszystkie te elementy z macierzy, ktorym przypisalem jakis tam znak. Nie wiem po prostu jak przy wyswietlaniu zapetlic przejscie do nowej linii, w ktorym miejscu to zrobic. mam nadzieje, ze mozna zrozumiec, te moje wypociny. Dzieki za ewentualna pomoc ;)

EDIT: Aha, zapomnialem dodac, ze program wczesniej pyta o o rozmiar figury (dlugosc podstawy, wysokosc).

Link do komentarza
Udostępnij na innych stronach

Musisz skądś brać informacje, gdzie należy wstawić znak nowej linii.

Jeśli zapisujesz rozmiary tej macierzy, to znaki nowej linii wstawiaj co wielokrotność szerokości - musiałbyś wyświetlać blokami po szerokość macierzy.

Podaj może przykład pliku zapisanego, jakiś kawałek kodu pokazujący, jak odczytujesz i wypisujesz figury.

Link do komentarza
Udostępnij na innych stronach

printf("Podaj dlugosc wysokosci rownolegloboku:\n");
                            scanf("%d", &a);
                            printf("Podaj dlugosc podstawy rownolegloboku:\n");
                            scanf("%d", &b);
                            char tab[a][b];
                            
                            
                            for(i=0;i<a;i++)
                            {
                                            for(j=i;j<b;j++)
                                            {   tab[i][j]='*';  
                                                printf("%c", tab[i][j]);
                                                                         }   }

Oczywiscie zmienne a,b,i,j wczesniej zadeklarowane. I tutaj wyswietlam normalnie, z zapisem do pliku zrobie analogicznie jak mi tutaj wyjdzie.

Oczywiscie zdaje sobie sprawe, ze w tej petli inaczej jak po kolei kazdy element mi nie wyswietli, dlatego ta petla oczywiscie ma jakis blad.

Link do komentarza
Udostępnij na innych stronach

No tak, to pomoglo. Ale w ten sposob tworze duzy prostokat, z ktorego czesc znakow musze zamienic na ' ' zeby wyszedl mi z tego rownoleglobok ;) Udalo mi sie skasowac jakby lewy trojkat tego prostokata, ale nie mam pojecia jak skasowac prawy. Wyglada to tak:

printf("Podaj dlugosc wysokosci rownolegloboku:\n");
                            scanf("%d", &a);
                            printf("Podaj dlugosc podstawy rownolegloboku:\n");
                            scanf("%d", &b);
                            char tab[a][b];
                            
                            
                            for(i=0;i<a;i++)
                            {
                                            for(j=0;j<2*b;j++)
                                            {   tab[i][j]='*';
                                                if (j<i)
                                                tab[i][j]=' ';
                                                printf("%c", tab[i][j]);
                                            }
                                            printf("\n"); }

Link do komentarza
Udostępnij na innych stronach

No dobra, bo nie wymysle chyba nic. Otoz na ekranie chce uzyskac:

a) trojkat: wymyslilem sobie zeby przedstawic go w postaci gwiazdek "*". Czyli mam macierz tab[a]. Wprowadzam pomocnicze zmienne "i" i "j". Najpierw uzupelniam znakami "*" cala macierz tak, ze uzyskuje prostokat jakis np.

*******

*******

*******

*******

I teraz chce z tego zrobic trojkat, czyli wykasowac te trojkaty:

*** ***

** **

* * (zastapic '*' znakami ' ').

Powstanie mi wtedy jako taki trojkat, o wymiarach podanych wczesniej a,b.

Udalo mi sie zrobic cos takiego, ze ten jeden wielki prostokat obcinam przez pol i mam teoretycznie trojkat prostokatny, ale w praktyce dla duzej roznicy wartosci wysokosci i podstawy trojkat bedzie wyswietlony za maly niz byc powinien.

PS1: Zdaje sobie sprawe, ze ten trojkat nie bedzie taki calkiem idealny, gdyz przy parzystej podstawie trzeba obciac gore i wysokosc jest o 1 mniejsza, no ale coz.

PS2: Dlogosc przyjmuje oczywiscie jako jedna '*'=1 ;)

PS3: Rowniez w tym przypadku przy podaniu wysokosci duzo wiekszej od podstawy nie damy rady uzyskac trojkata, gdyz trzeba bedzie obciac gorne rzedy, no ale na to chyba nie ma rady.

PS4: Jakby ktos mial jakis inny pomysl niz uzupelniane znakow '*' znakami ' ' to bardzo prosze niech przedstawi (np od razu samymi gwiazdkami w okreslonych miejscach).

Fragment kodu:

  {     printf("Podaj dlugosc wysokosci trojkata\n");
                            scanf("%d", &a);
                            printf("Podaj dlugosc podstawy trojkata\n");
                            scanf("%d", &b);
                            char tro[a][b];
                            
                            for(i=0;i<a;i++)
                            {
                              for(j=0;j<b;j++)
                              {   tro[i][j]='*';
                                  printf("%c", tro[i][j]);
                              }
                                  printf("\n");
                            } }

Tutaj jest uzupelnianie do prostokata tylko.

Analogicznie musze zrobic dla rownolegloboku, ale jesli by ktos wyjasnij jak obciac te trojkaty to moze sobie poradze, bo tam trzeba zrobic to samo, tylko jeden trojkat bedzie odwrocony.

Poniewaz widze, ze te trojkaty male nie sa zbyt widoczne zalaczam plik tekstowy, w ktorym wszystko widac lepiej.

Uff, mam nadzieje, ze zrozumiecie o co mi chodzi ;)

a.txt

Link do komentarza
Udostępnij na innych stronach

Ja bym całkowicie inaczej do tego podszedł, bardziej matematycznie.

Masz daną wysokość oraz podstawę. Skoro budujesz trójkąt równoramienny, to bierzesz połowę podstawy i liczysz proporcję wysokości do tej połowy podstawy.

Teraz, dla y (w sensie linii na konsoli: 1, 2, ..., h) liczysz (korzystając z proporcji) x, czyli ilość gwiazdek do wyświetlenia od środka trójkąta.

Odejmujesz sobie od połowy podstawy uzyskaną liczbę i już wiesz, ile znaków będzie pustych.

Robisz pętlę od 1 do h (albo raczej od 0 do h-1), gdzie wyświetlasz kolejno: obliczone znaki puste, 2*x (bo x liczyłeś dla połówki trójkąta). Obliczone znaki puste można oczywiście zignorować, chyba że są inne niż spacja.

Pozostaje jedynie gdzieś po drodze zaokrąglać obliczone wartości do liczb całkowitych.

Równoległobok można zrobić analogicznie.

Spróbuj ugryźć problem moim sposobem, na razie kodu żadnego nie daję :-)

Link do komentarza
Udostępnij na innych stronach



  • Kto przegląda   0 użytkowników

    • Brak zalogowanych użytkowników przeglądających tę stronę.
×
×
  • Utwórz nowe...