mikewazowski Temat założony przez niniejszego użytkownika |
wyszukanie ciągu liczb w tablicy dynamicznej » 2017-12-27 21:42:06 mając tablicę wypełnioną liczbami: tab =[ 0, 0, 0, 0, 1, 12, 12, 0, 0, 0, 12, 2, 13 ]
chciałabym znaleźć przedziały tablicy zawierające tylko zera, dokładnie pozycję w której przedział zaczyna się (start) i kończy (stop),w przypadku tej tablicy będą to start = 0 i stop = 3 oraz start = 7 i stop = 9. Dane nie muszą być zapamiętywane na dłużej, ponieważ ciągi zer w tablicy zostaną od razu zmodyfikowane. Program ma działać dla każdej tablicy o dowolnym rozmiarze, a nie dla tej konkretnej. Dodaje kod który być jak na razie jest bezużyteczny: int n = 13; int * tab = new int[ n ];
int start, stop;
for( int i = 0; i < n; i++ ) { int j = i + 1; if( tab[ i ] == 0 ) { start = i; } if( tab[ j ] != 0 ) { stop = i; } cout << start << " " << stop; break; }
|
|
Chowan |
» 2017-12-27 22:19:16 #include <iostream> #include <vector>
int main() { using std::vector; using std::endl; using std::cout; int start, stop; vector < int > tab = { 0, 0, 0, 0, 1, 12, 12, 0, 0, 0, 12, 2, 13 }; int indeks = 0; for( vector < int >::iterator i = tab.begin(); i != tab.end(); i++ ) { if( * i == 0 ) { start = indeks; while( * i == 0 ) { stop = indeks; indeks++; i++; } cout << start << " " << stop << std::endl; } indeks++; } return 0; }
|
|
mateczek |
» 2017-12-27 22:27:01 metod jest cała masa mogę Ci zaproponować przebieżkę po tablicy i sprawdzenie jaki zmienia się liczba #include<iostream> using namespace std; int main() { int tab[] = { 0, 0, 0, 0, 1, 12, 12, 0, 0, 0, 12, 2, 0 }; bool zero = false; bool zero_p = false; bool zero_f = false; for( int i = 0; i < 13; i++ ) { zero_p =( tab[ i ] == 0 ) &&( !zero ); zero_f =( tab[ i ] != 0 ) && zero; zero =( tab[ i ] == 0 ); if( zero_p ) cout << "start " << i << " "; if( zero_f ) cout << "stop " << i - 1 << " "; } }
oczywiście kod da się skrócić ale spada czytelność #include<iostream> using namespace std; int main() { int tab[] = { 0, 0, 0, 0, 1, 12, 12, 0, 0, 0, 12, 2, 0 }; bool zero = false; for( int i = 0; i < 13; i++ ) { if(( tab[ i ] == 0 ) &&( !zero ) ) cout << "start " << i << " "; if(( tab[ i ] != 0 ) && zero ) cout << "stop " << i - 1 << " "; zero = !tab[ i ]; } }
|
|
mikewazowski Temat założony przez niniejszego użytkownika |
» 2017-12-27 23:35:29 dziękuję za pomoc, działa, zamykam |
|
« 1 » |