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

pytanie o sposoby wprowadzania danych

Ostatnio zmodyfikowano 2008-12-27 18:45
Autor Wiadomość
lynx
» 2008-12-25 20:56:19
Nazwa tablicy jest jednocześnie wskaźnikiem do jej zerowego elementu, a więc chcąc zwracać c (czyli wskaźnik do pierwszego elementu tablicy int) musisz przerobić funkcję aby zwracała wskaźnik do int, a nie typ int. Zamień int rozdzielaj(...) na *int rozdzielaj(...) i powiedz czy działa.

/edit1:
Sorry, jeżeli zwracamy wskaźnik piszemy int* rozdzielaj(...).
P-2978
DejaVu
» 2008-12-25 21:08:15
Widzę, że dyskusja trwa, więc pozwolę sobie podać najprostszy sposób z możliwych na wczytywanie danych:
C/C++
#include <iostream>
using namespace std;
#include <conio.h>

int main()
{
    int liczba[ 500 ];
    char znak;
    for( int i = 0; i < 3; i++ )
    {
        cin >> liczba[ i ];
        if( i != 2 ) cin >> znak;
       
    }
   
    for( int i = 0; i < 3; i++ ) cout << liczba[ i ] << ", ";
   
    getch();
    return 0;
}
P-2979
pekfos
Temat założony przez niniejszego użytkownika
» 2008-12-26 11:12:57
coś te moje rozwiązanie nie jest zbyt dobre... :(
C/C++
#include <sstream>
#include <iostream>
#include <conio.h>
using namespace std;


int * rozdzielaj( string a, char b, int c[] )
{
    int d = a.length();
    int f = 0;
    for( int e = 0; e < d; e++ )
    {
        if( a[ e ] == b ) f++;
       
    }
    string h[ f ];
    string i = "";
    int j = 0;
    for( int g = 0; g < d; g++ )
    {
        if( a[ g ] != b ) i += a[ g ];
       
        if( a[ g ] == b )
        {
            h[ j ] = i;
            j++;
        }
    }
    stringstream l;
    for( int k = 0; k < f; k++ )
    {
        l << h[ k ];
        l >> c[ k ];
    }
    return c;
}


int main()
{
    string tekst;
    int tablica[ 30 ];
    getline( cin, tekst );
    rozdzielaj( tekst, ';', tablica );
    for( int z = 0; z < 30; z++ ) cout << tablica[ z ];
   
    getch();
    return 0;
}
jak wprowadzam '23' do programu to wywala ciąg kilku linijek cyfr
P-2982
pekfos
Temat założony przez niniejszego użytkownika
» 2008-12-26 17:40:17
a jak wygląda budowa i użycie funkcji która zwraca całą tablicę?
P-2983
lynx
» 2008-12-26 20:38:36
A czy nie lepiej jest zwrócić wskaźnik do niej? Taki sposób jest o wiele wydajniejszy. :)
P-2985
pekfos
Temat założony przez niniejszego użytkownika
» 2008-12-27 11:38:50
znalazłem jeszcze wydajniejszy sposób w kursie. tworzy się tablicę na zewnątrz funkcji i podaje się ja w parametrach z referencją dzięki czemu wartość tablicy zmieni się po zakończeniu działania funkcji. najlepiej zamiast tablicy dać vectora bo jak programista się pomyli i zadeklaruje za mało elementów w tablicy to koniec pracy programu. wykorzystam to do ulepszenia mojej funkcji :)
P-2992
pekfos
Temat założony przez niniejszego użytkownika
» 2008-12-27 15:55:07
C/C++
#include <iostream>
#include <conio.h>
#include <sstream>
#include <queue>
using namespace std;

void inttab( queue < int > & a, string b, char e )
{
    int c = b.length();
    queue < string > f;
    string g = "";
   
    for( int d = 0; d < c; d++ )
    {
        if( b[ d ] == e )
        {
            f.push( g );
            g = "";
        }
        if( b[ d ] != e ) g += b[ d ];
       
    }
   
    f.push( g );
    stringstream j;
    int t;
   
    for( int i = 0; i < f.size(); i++ )
    {
        j << f.front();
        j >> t;
        f.pop();
        a.push( t );
    }
}

int main()
{
    string tekst = "";
    getline( cin, tekst );
    queue < int > kolejka;
    char znak = ';';
    inttab( kolejka, tekst, znak );
    for( int a = 0; a < kolejka.size(); a++ )
    {
        cout << kolejka.front() << endl;
        kolejka.pop();
    }
    getch();
    return 0;
}
hmm.. działa dosyć dobrze ..dopóki się nie wprowadzi więcej niż jednej liczby
nie wiem czemu ale funkcja zwraca kolejkę z tylko jedną liczbą :(
P-2999
setless
» 2008-12-27 16:04:24
Jeżeli problem polega tylko na wprowadzaniu liczb, z założeniem że średnik będzie owe liczby oddzielał to można zrobić to również w ten sposób:
C/C++
#include <iostream>
#include <conio.h>

using namespace std;

int main() {
    int tab[ 20 ], liczba = 0, i = 0;
    char znak;
    bool koniec = false;
    while( !koniec ) {
        znak = cin.peek();
        if(( znak == ';' ) ||( znak == ' ' ) ) { // omijanie
            cin.ignore( 1 );
            continue;
        }
        if(( int( znak ) == 10 ) ||( int( znak ) == - 1 ) ) break; // wyjscie
       
        if(( int( znak ) < int( '0' ) ) ||( int( znak ) > int( '9' ) ) ) { // wyjatki ( nie przepuszcza nic oprocz cyfr 0..9 )
            cin.ignore( 1 );
            continue;
        }
        cin >> tab[ i ];
        i++;
    }
    for( liczba = 0; liczba < i; liczba++ )
         cout << "Element " << liczba + 1 << ": " << tab[ liczba ] << endl;
   
    getch();
    return 0;
}
Dla przejrzystości można if'y zamienić na switch, to wedle uznania. Natomiast jeżeli nie oto chodziło to przepraszam za swoje przysłowiowe 3 grosze ;D.
P-3000
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona