Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

wyszukanie ciągu liczb w tablicy dynamicznej

Ostatnio zmodyfikowano 2017-12-27 23:35
Autor Wiadomość
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:
C/C++
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:

C/C++
int n = 13;
int * tab = new int[ n ]; // tablica jest wypełniona odpowiednimi liczbami ale pomijam wklejenie tego fragmentu kodu

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;
}
P-168158
Chowan
» 2017-12-27 22:19:16
C/C++
#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;
}
P-168159
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

C/C++
#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 ); //pojawiło się zero czytaj --" jeśli element ==0 a poprzednio nie był zerem"
        zero_f =( tab[ i ] != 0 ) && zero; //zniknęło zero      czytaj ---" jeśli element nie zerowy, a poprzednio był zerem
        zero =( tab[ i ] == 0 ); //czy zero;
        if( zero_p ) cout << "start " << i << " ";
       
        if( zero_f ) cout << "stop " << i - 1 << " ";
       
    }
}

oczywiście kod da się skrócić ale spada czytelność
C/C++
#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 ];
    }
}
P-168160
mikewazowski
Temat założony przez niniejszego użytkownika
» 2017-12-27 23:35:29
dziękuję za pomoc, działa, zamykam
P-168164
« 1 »
  Strona 1 z 1