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

question-closed Paradox podczas wczytywania danych

Object Storage Arubacloud
0 głosów
105 wizyt
pytanie zadane 8 listopada 2015 w C i C++ przez ZakosiliMiNeta Nałogowiec (30,870 p.)
zamknięte 8 listopada 2015 przez ZakosiliMiNeta

Trochę cięzko mi przedstawić problem w sposób zrozumiały.

#include <cstdio>
#include <vector>

using namespace std;
char tab[1005][1005];
bool odw[1005][1005];
int n; /////////////////////////////////////////////////////////////////////


struct Wierz{ 
	int x,y;
	int wys,sze;
	int rozmiar;
};

vector < Wierz > wierzcholki; ////////////////////////////////////////////////

void tworz ( int i , int j ){
	Wierz wierz;
	wierz.y = i;
	wierz.x = j;
	wierz.wys = 0;
	wierz.sze = 0;
	while ( true ){
		if ( tab[i+wierz.wys][j] == 'B' )
			wierz.wys++;
		else break;
	}
	while ( true ){
	    if ( tab[i][j+wierz.sze] == 'B' )
			 wierz.wys++;
	    else break;
	}
	for ( ; i < i+wierz.wys; i++)
		for ( ; j < j+wierz.sze; j++) odw[i][j] = true;
	
	wierz.rozmiar = wierz.sze*wierz.wys;
	wierzcholki.push_back ( wierz );
}

void tworz_wierz (){
	printf("lol");
	for ( int i = 0; i < n; i++)
		for ( int j = 0; j < n; j++){
			if ( tab[i][j] == 'B' && odw[i][j]==false )  tworz ( i , j ); 
			else 
				odw[i][j] == true;
		}
}



int main (){
	scanf("%d", &n);
	for ( int i = 0; i < n; i++) scanf("%s", tab[i]);

	printf ("%c", tab[4][4]);
	tworz_wierz();
	printf("%lu\n", wierzcholki.size());
}

 

Gdy chcę wczytać  dane typu

5

BBBAB

BBBAB

AAAAA

BBABA

BBAAB

To program wczyta dane, a następnie się zapętla ( o dziwo program nie wchodzi do funkcji tworz_wierz bo nie wypisuje nic a powinien wypisać "lol" ). Lecz gdy wczytam dane  typu

5
AAAAA
AAAAA
AAAAA
AAAAA
AAAAA

To program normalnie się wykona. Czyli gdy wczytam w jakimś ciągu literę  B to program się zapętla. Mógłby mi ktoś wyjaśnić ten paradox ?

komentarz zamknięcia: Problem rozwiązany

1 odpowiedź

+1 głos
odpowiedź 8 listopada 2015 przez furas Maniak (53,800 p.)

Daj wypisywanie zmiennych i komunikatów w najróżnieszych miejscach aby przekonać się co się dzieje podczas wykonywania programu. W ten sposób może zauważysz gdzie program robi coś nie tak jak powinien.

---

if ( tab[i][j+wierz.sze] == 'B' )
             wierz.wys++;

W powyższej linii chcesz sprawdzać kolejne litery w wierszu ale zwiększasz numer wiersza - co może być powodem zapętlenia - bo sprawdzasz cały czas tą samą literę.

komentarz 8 listopada 2015 przez ZakosiliMiNeta Nałogowiec (30,870 p.)

Nie do końca o to mi chodziło.

( o dziwo program nie wchodzi do funkcji tworz_wierz bo nie wypisuje nic a powinien wypisać "lol" )

Zmieniłem system z linuxa na windowsa i ten problem można powiedzieć, że sam się rozwiązał :) Najlepszej nie dam, ponieważ nie rozwiązał to mego problemu ale plus jak najbardziej się należy :)

komentarz 8 listopada 2015 przez furas Maniak (53,800 p.)

printf  wysyła tekst do bufora a tekst z bufora zostaje wysłany na ekran chyba dopiero gdy pojawi się tam znak końca linii "\n". 

Jeśli program się zapętlił to bufor nigdy nie tafia na ekran pomimo tego, że printf został wykonany.

Podobne pytania

0 głosów
0 odpowiedzi 469 wizyt
pytanie zadane 23 stycznia 2017 w C i C++ przez heros22pt Użytkownik (950 p.)
0 głosów
3 odpowiedzi 566 wizyt
pytanie zadane 23 listopada 2015 w C i C++ przez C☺ndzi Stary wyjadacz (12,100 p.)
0 głosów
0 odpowiedzi 352 wizyt
pytanie zadane 31 stycznia 2022 w C i C++ przez tonn204 Mądrala (7,440 p.)

92,615 zapytań

141,465 odpowiedzi

319,780 komentarzy

61,997 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!

...