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

Sortowanie nazwisk [C]

Ostatnio zmodyfikowano 2017-02-17 04:51
Autor Wiadomość
Nazgul
» 2017-02-16 04:01:58
Ależ nie ma za co, też coś z tego miałem(dobrą zabawę z ciśnięcia Ci;D)
P-157815
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-02-16 13:10:50
To z #include w innym zadaniu już zrobiłem i działa! :D

Ale tutaj jeszcze potrzebuję wypisywania tej tablicy. Nie wiem jak wypisać tablicę, która zawiera napisy, bo wypisuje mi cyfry ;p W C++ wystarczy cout, a tutaj trzeba się bawić te %d itd ;/

C/C++
#include <stdio.h>
#include <stdlib.h>

const unsigned int MAX_DLUGOSC_WYRAZU = 25;
const unsigned int MAX_LICZBA_STUDENTOW = 30;


int main() {
    unsigned int n = 0;
    char tablica_studentow[ 2 ][ MAX_LICZBA_STUDENTOW ][ MAX_DLUGOSC_WYRAZU ];
    unsigned int posortowani_studenci[ MAX_LICZBA_STUDENTOW ];
   
    for( unsigned int i = 0; i < MAX_LICZBA_STUDENTOW; i++ )
         posortowani_studenci[ i ] = i;
   
    printf( "Podaj liczbe studentow: " );
    scanf( "%d", & n );
    if( n > MAX_LICZBA_STUDENTOW )
         return 1;
   
    for( unsigned int i = 0; i < n; i++ )
    {
        printf( "\nPodaj imie studenta nr %d: ", i + 1 );
        scanf( "%24s", & tablica_studentow[ 1 ][ i ][ 0 ] );
        printf( "Podaj nazwisko studenta nr %d: ", i + 1 );
        scanf( "%24s", & tablica_studentow[ 0 ][ i ][ 0 ] );
    }
   
   
   
    unsigned int rozmiar = n;
    while( rozmiar > 1 )
    {
        for( unsigned int i = 0; i < rozmiar - 1; i++ )
        {
            for( unsigned int j = 0; j < MAX_DLUGOSC_WYRAZU; j++ )
            {
                if( tablica_studentow[ 0 ][ posortowani_studenci[ i ] ][ j ] > tablica_studentow[ 0 ][ posortowani_studenci[ i + 1 ] ][ j ] )
                {
                    unsigned int zamiennik = posortowani_studenci[ i ];
                    posortowani_studenci[ i ] = posortowani_studenci[ i + 1 ];
                    posortowani_studenci[ i + 1 ] = zamiennik;
                }
            }
        }
        rozmiar--;
    }
   
   
    for( int i = 0; i < n; ++i ) {
        printf( "%c %c\n", tablica_studentow[ 1 ][ i ][ 0 ], tablica_studentow[ 0 ][ i ][ 0 ] );
    }
   
    return 1;
}


Tak opierdzielałem się w szkole :D
%d - liczby, %c - znaki. Ale jak będzie dla wyrazów? %s nie pasuje, a myślałem, że to będzie dla stringów :/
A poza tym to nie wiem czy dobrze wybrałem co ma być wypisywane ale chyba tak :d Jak nie to mnie poprawcie :D
P-157827
michal11
» 2017-02-16 13:18:53
P-157828
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-02-16 13:38:39
To dlaczego mi wysypuje program gdy daję:
C/C++
for( int i = 0; i < n; ++i ) {
    printf( "%s %s\n", tablica_studentow[ 1 ][ i ][ 0 ], tablica_studentow[ 0 ][ i ][ 0 ] );
}

P-157829
michal11
» 2017-02-16 13:41:16
bo chcesz wypisać jeden znak
tablica_studentow[ 1 ][ i ][ 0 ]
. Ponieważ to jest tablica charów więc odwołanie się przez wszystkie indeksy to uzyskanie jednego znaku.
P-157830
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-02-16 20:09:26
To teraz mam zmienić całą tablicę na tablicę stringów?
Zawsze myślałem, że to zadanie powinno się zacząć tablicą znaków, a potem majstrować przy wypisywaniu.

Szukałem w internecie i nie znalazłem wypisania tego z tablicy :/
Jedynie jakaś nowa dla mnie funkcja strcpy. Może tak by dało radę? Ale nie powinienem tego użyć raczej :/
P-157848
michal11
» 2017-02-16 22:26:37
C/C++
int main()
{
    char tab[ 10 ] { "cstring" };
    printf( "%c | %s\n", tab[ 0 ], tab );
   
    char tab2[ 2 ][ 10 ] { "cstring", "cstring" };
    printf( "%c | %s\n", tab2[ 0 ][ 0 ], tab2[ 0 ] );
   
    char tab3[ 3 ][ 2 ][ 10 ] { { "cstring", "cstring" }
        , { "cstring", "cstring" }
        , { "cstring", "cstring" } };
    printf( "%c | %s\n", tab3[ 0 ][ 0 ][ 0 ], tab3[ 0 ][ 0 ] );
   
    return 0;
}

edit.
Formatowanie trochę się rozjechało ale powinieneś zrozumieć ten kod i różnice w wypisywaniu tablic wielowymiarowych.
P-157867
nowawieza
Temat założony przez niniejszego użytkownika
» 2017-02-16 23:05:54
Dobra, myślę, że choć trochę zrozumiałem dzięki tobie jak działa to wypisywanie.
Jednak nie mogę się odnaleźć w tej tablicy...

C/C++
for( int i = 0; i < n; ++i ) {
    printf( "%s%s\n", tablica_studentow[ 1 ][ i ], tablica_studentow[ 0 ][ i ] );
}

Jak daję coś takiego to wyrazy nie są posortowane.

A jak daję tak:

C/C++
for( int i = 0; i < n; ++i ) {
    printf( "%s%s\n", tablica_studentow[ 0 ][ i ], tablica_studentow[ 1 ][ i ] );
}

To imię z nazwiskiem jest zamienione miejscami.

Robię to na wszystkie sposoby i nie daje rady. A jak daję to dla 5 osób to program wywala ;/
P-157872
1 2 « 3 » 4
Poprzednia strona Strona 3 z 4 Następna strona