• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablica dwuwymiarowa crashowanie programu, krótki program duży błąd:)

Object Storage Arubacloud
0 głosów
335 wizyt
pytanie zadane 14 kwietnia 2017 w C i C++ przez WuduChild Nowicjusz (230 p.)
edycja 14 kwietnia 2017 przez WuduChild

Cześć mam problem z tym kodem program się crashuje, jest to związane z wpisywaniem znaków do tej dwuwymiarowej tablicy.(chodzi o to żeby znalazła się w niej choinka ze znaków) Głowie się nad tym już sporo czasu, proszę o pomoc, co jest napisane nie tak?



#include <iostream>
using namespace std;

int main()
{
char choinka[18][17];
int s=8;
int g=1;
int ko=0;
int wi=0;
for(int ile=0;ile<2;ile++)
{
 for(int w=0;w<9;w++|wi++)
 {

   for(int k=0;k<s;k++|ko++)
	{
  choinka[wi][ko]=' ';
  cout<<choinka[wi][ko];
	}
	
   for(int k=0;k<g;k++|ko++)
	{
   cout<<"*";
   cout<<choinka[wi][ko];
	}
	
    for(int k=0;k<s;k++|ko++)
	{
    choinka[wi][ko]=' ';
    cout<<choinka[wi][ko];
	}
	
s--;
g+=2;
cout<<endl;
 }
g=1;
s=8;
}
return 0;
}
komentarz 14 kwietnia 2017 przez Patrycjerz Mędrzec (192,320 p.)
Popraw najpierw formatowanie. Tego czytać się nie da…
komentarz 14 kwietnia 2017 przez WuduChild Nowicjusz (230 p.)
Poprawiłem, może teraz jest troche lepiej.
komentarz 14 kwietnia 2017 przez Michał628496 Pasjonat (17,340 p.)
Mógłbyś wyjaśnić co oznacza która zmienna ? Będzie wtedy łatwiej pomóc.
komentarz 14 kwietnia 2017 przez WuduChild Nowicjusz (230 p.)
int s - ilość spacji ona się zmniejsza iteracyjnie, int g - ilość gwiazdek zwiększa się ko-numer kolumny wi-numer wiersza  choinka[wi][ko]

1 odpowiedź

0 głosów
odpowiedź 14 kwietnia 2017 przez Knayder Nałogowiec (37,640 p.)

Generalnie twój kod jest brzydki w cholerę. Nie wiem po co ci tyle dziwnych zmiennych, więc napisałem po prostu kod, który uzupełnia tablicę choinką.
Zauważ że nie zawsze da się zrobić choinkę z podanych wymiarów, więc u mnie definiuje się tylko wysokość, a szerokość oblicza program (height * 2 - 1).
Przeanalizuj ten kod.
 

#include <iostream>
using namespace std;

int main()
{
	const int height = 7, width = (height * 2) - 1;
	char tree[height][width];

	for (int y = 0; y < height; y++) //Wypełnij tablicę pustymi znakami
		for (int x = 0; x < width; x++)
			tree[y][x] = ' ';

	for (int y = 0; y < height; y++) { //Wypełnij tablicę choinką
		int i; //Szerokość choinki na danej wysokości (wartość y to wysokość)
		//int x - od którego miejsca zaczyna się choinka
		for (int x = width / 2 - y, i = 0; i < 2*(y+1) - 1; x++, i++) // 2*(y+1) - 1    - szerokość choinki w podanym 'y'
			tree[y][x] = 'O';
	}

	for (int y = 0; y < height; y++) { //Wypisz tablicę
		for (int x = 0; x < width; x++)
			cout << tree[y][x];
		cout << '\n';
	}
	cin.get(); //Żeby się program nie wyłączył
	return 0;
}

 

komentarz 14 kwietnia 2017 przez WuduChild Nowicjusz (230 p.)
Okej dzięki, naucze się czegoś z tego, moglbyś powiedzieć dlaczego wczesniej wypełniasz ją pustymi znakami?
komentarz 14 kwietnia 2017 przez WuduChild Nowicjusz (230 p.)

Mój program dobrze wypisywał choinkę ale crashował przy wpisywaniu jej do tablicy dlatego podejrzewalem ze tam robię błąd.Tak wyglada choinka

1
komentarz 14 kwietnia 2017 przez Knayder Nałogowiec (37,640 p.)
Wypełniam ją najpierw pustymi, żeby nie musieć tego robić jak wpisuje do środka choinkę.
Nie wiem czemu masz błąd, ciężko rozszyfrować twój kod (Nazywaj zmienne inaczej, a nie pojedynczymi literkami, a jeżeli już, to niech mówią same o sobie, co oznaczają np. x i y, logiczne że chodzi o położenie).
Prawdopodobnie wychodzisz poza zasięg tablicy.
1
komentarz 14 kwietnia 2017 przez mokrowski Mędrzec (155,460 p.)
To że kod pierwotny czytuję "brzydki w cholerę" jest to z tym się zgadzam. Jeśli pytający uparł się na tablice (a naprawdę vector string'ów byłby lepszy), to będzie zmuszony używać dynamicznej alokacji przez new. Z kolei new wymaga sprzątania. Stąd.. biję się z myślami jaki przykład zaprezentować..
komentarz 14 kwietnia 2017 przez WuduChild Nowicjusz (230 p.)
Nie tyle uparł się tylko tak brzmi polecenie ze stronki Apki.org "Utwórz tablicę o nazwie choinka o 18 wierszach i 17 kolumnach: char choinka[18][17] Do tablicy wpisz odpowiednio znaki w postaci * lub spacji wspomagając się przy tym instrukcjami iteracyjnymi."
1
komentarz 14 kwietnia 2017 przez Knayder Nałogowiec (37,640 p.)
1
komentarz 14 kwietnia 2017 przez mokrowski Mędrzec (155,460 p.)
Ok. To znaczy że nie ma o co walczyć. Dość że prawie 1/4 tablicy w pamięci jest zbędna bo są tam spacje a mogło by nie być nic. No to pokażę przykład z tablicami dynamicznymi.
komentarz 14 kwietnia 2017 przez mokrowski Mędrzec (155,460 p.)

Przecież wartości height i width są stałe.
http://stackoverflow.com/questions/9219712/c-array-expression-must-have-a-constant-value

Napisałem post niżej że chodzi o zajętość pamięci "w gwizdek" :-) Tak zauważyłem że są stałe i post natychmiast po tym poprawiłem. Przeczytałeś pewnie jeszcze z cache :-)

komentarz 14 kwietnia 2017 przez Knayder Nałogowiec (37,640 p.)
Spoko :)

Podobne pytania

+1 głos
4 odpowiedzi 468 wizyt
pytanie zadane 1 lutego 2021 w C i C++ przez forok Nowicjusz (160 p.)
0 głosów
2 odpowiedzi 483 wizyt
0 głosów
1 odpowiedź 770 wizyt

92,568 zapytań

141,424 odpowiedzi

319,634 komentarzy

61,956 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...