Reklama
Pokazuje wyniki od 1 do 10 z 10

Temat: [C] Sortowanie przez znajdowanie max.

  1. #1
    Avatar Ada$ Zawodowiec
    Data rejestracji
    2008
    Posty
    806
    Siła reputacji
    16

    Domyślny [C] Sortowanie przez znajdowanie max.

    Witam,
    potrzebuję przerobić ten kod tak, żeby użyte zostały tylko wskaźniki, a totalnie ich nie ogarniam, a muszę to mieć na jutro jako zadanie domowe.
    Czy ktoś mógłbym mi przerobić ten kod tak, żeby zostały użyte w nim wskaźniki? Nie trzeba mi tłumaczyć, bo zacznę się tego uczyć jakoś w weekend, a teraz bym tylko sobie przeanalizował kod.
    Z góry dzięki za pomoc!


    Kod:
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
    
    void wyswietl (int *tab, int n)
    {
         int i;
         for(i=0;i<n;i++){
         
         printf("%d", tab[i]);
    printf("  ");
     }
         printf("\n");
         
    }  
    
    
    
    int main()
    {
        int tab[10];
        int i,j,n,i_max,max;
        
        int *wsk;
        int *wsk2;
        
       // *wsk=tab[i];
    	
    	
    	srand(time(0));
        
        
        
        for(i=0;i<10;i++)
        tab[i]=rand()%11-5;
        
        
    wyswietl(tab,10);
    n=10;
    
      for ( j = n-1; j > 0; j-- ){
    
        max = tab[0];
        i_max = 0;
        for ( i = 1; i <= j; i++ )
      
          if ( tab[i] < max ){
            max = tab[i];
            i_max = i;
          }
        tab[i_max] = tab[j];
        tab[j] = max;
      }
     
      
      	wyswietl(tab,10);
     
        printf("\n");	
        getchar();
        return 0;
            
    }

  2. #2

    Data rejestracji
    2007
    Położenie
    Warszawa, karton nr 4
    Posty
    54
    Siła reputacji
    18

    Domyślny

    Jedyne, co tu widzę do zrobienia to

    zamiast
    Kod:
    int tab[10]
    dać
    Kod:
    int *tab = new int(10);
    Powyższa zmiana nie wpływa na resztę kodu.
    od biedy można skorzystac z tożsamości
    Kod:
    t[i] = (t + i)*
    jeśli t to tablica.
    na końcu programu
    Kod:
    delete[] tab;
    niby nie trzeba, bo pamieć i tak zostanie zwolniona, ale to dobra praktyka, żeby wyrobić sobie nawyk zwalniania zasobów, gdy nie są potrzebne, nawet, jak system operacyjny zrobi to za nas.
    Quixo napisał:
    Więc w naszym kraju naprawde są bezmózgi mózyczne?

  3. Reklama
  4. #3
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    imho nie miał założenia aby ta tablica była dynamiczna. Przecież może sobie spokojnie jeździć wskaźnikiem po tablicy statycznej

    irc: freenode.net in #torgdevs

  5. #4

    Data rejestracji
    2007
    Położenie
    Warszawa, karton nr 4
    Posty
    54
    Siła reputacji
    18

    Domyślny

    @up: Jak widzisz lepszy sposób, żeby spełnić to durne kryterium to proszę, powiedz.
    Tablice powinny być alokowane na stercie, więc nawet, jeśli to nie jest wymóg to powinien tak zrobić, bo potem walnie za dużą tablicę, dostanie SIGSEGV i będzie się zastanawiał, gdzie się odwołuje do lewej pamięci a to po prostu przepełnienie stosu... A tak to dostanie std::bad_alloc i wszystko wiadomo.
    Ostatnio zmieniony przez KishonyOgurek : 27-03-2014, 14:29
    Quixo napisał:
    Więc w naszym kraju naprawde są bezmózgi mózyczne?

  6. #5
    Avatar Ada$ Zawodowiec
    Data rejestracji
    2008
    Posty
    806
    Siła reputacji
    16

    Domyślny

    Cytuj KishonyOgurek napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    @up: Jak widzisz lepszy sposób, żeby spełnić to durne kryterium to proszę, powiedz.
    Tablice powinny być alokowane na stercie, więc nawet, jeśli to nie jest wymóg to powinien tak zrobić, bo potem walnie za dużą tablicę, dostanie SIGSEGV i będzie się zastanawiał, gdzie się odwołuje do lewej pamięci a to po prostu przepełnienie stosu... A tak to dostanie std::bad_alloc i wszystko wiadomo.
    Dzisiaj zapytałem gościa o ten twój sposób, to powiedział, że to jest sposób z c++.

  7. #6
    konto usunięte

    Domyślny

    Cytuj KishonyOgurek napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    Tablice powinny być alokowane na stercie
    Udowodnij.

  8. #7

    Data rejestracji
    2007
    Położenie
    Warszawa, karton nr 4
    Posty
    54
    Siła reputacji
    18

    Domyślny

    @OP ma rację, nie zauważyłem, że to C, a nie C++. w takim razie zamiast
    Kod:
    new int[10]
    wrzuć
    Kod:
    malloc(10 * sizeof(int))
    .
    Wyjątku nie dostaniesz, bo to nie C++, ale jak się alokacja nie powiedzie to malloc poda NULL zamiast adresu do pamięci. Wtedy wiesz, ze to akurat tu sie nie powiodło, a nie gdzieś indziej.
    @up
    -stos ma znacznie bardziej ograniczony rozmiar
    -w razie błędu wiesz, gdzie coś nawala
    -alokowanie rzeczy na stosie pozwala na dużo dokładniejsze sprecyzowanie, co ma się z tą pamięcią stać
    wpisz sobie stack vs heap w wyszukiwarke jak ci jeszcze malo
    Quixo napisał:
    Więc w naszym kraju naprawde są bezmózgi mózyczne?

  9. #8
    konto usunięte

    Domyślny

    Cytuj KishonyOgurek napisał Pokaż post
    Cytat został ukryty, ponieważ ignorujesz tego użytkownika. Pokaż cytat.
    @up
    -stos ma znacznie bardziej ograniczony rozmiar
    -w razie błędu wiesz, gdzie coś nawala
    -alokowanie rzeczy na stosie pozwala na dużo dokładniejsze sprecyzowanie, co ma się z tą pamięcią stać
    wpisz sobie stack vs heap w wyszukiwarke jak ci jeszcze malo
    Nie pisz mi czym rozni sie stos od sterty, tylko dlaczego tablice powinny byc alokowane na stercie. Anyway:
    "stos ma znacznie bardziej ograniczony rozmiar" - w przypadku tablicy intów, to nie ma znaczenia. Ponadto, rozmiar stosu zalezy od implementacji, moze byc 512kb, moze byc 200MB.
    "w razie błędu wiesz, gdzie coś nawala" - mowisz o badallocu przy alokowaniu pamieci? i alokowania na stosie i na stercie sa operacjami atomowami, wiec i tak bedziesz wiedzial gdzie 'cos nawala'.
    "alokowanie rzeczy na stosie pozwala na dużo dokładniejsze sprecyzowanie, co ma się z tą pamięcią stać" - chyba chodzilo Ci o sterte. o ile w przypadku "Hello World" jest ok, o tyle w aplikacjach duzego kalibru na stos odklada sie tylko, gdy to jest wymagane.

    Odnosnie porady o "wpisz sobie stack vs heap w wyszukiwarke", dzieki ale nie skorzystam.

  10. #9
    Avatar Kusterek
    Data rejestracji
    2013
    Położenie
    Warszawa
    Wiek
    31
    Posty
    1,710
    Siła reputacji
    13

    Domyślny

    ja pierdole, panowie :P takie dyskusje pod tematem tak trywialnym zadaniem :P
    Ja jestem przeciwny ładowaniu wszystkiego na stercie przy tak mało zaawansowanym poziomie programowania. Potem zapomni gdzieś zwolnić pamięci i mu się cuda wiańki będą działy w programie

    irc: freenode.net in #torgdevs

  11. #10
    Avatar Ada$ Zawodowiec
    Data rejestracji
    2008
    Posty
    806
    Siła reputacji
    16

    Domyślny

    A wie ktoś jak przerobić ten kod na tablicę dwuwymiarową?
    (bez wskaźników, tylko ten kod co w temacie ma być tablica dwuwymiarowa). Coś tam kombinuję, ale kompilator mi błędy wywala i nie ogarniam co się dzieję.

    /edit
    mam coś takiego, ale program mi nie chce sortować tych zrandomowanych cyfr. ustawiają się losowo.

    Kod:
    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
    
    void wyswietl (int tab[][10], int n)
    {
         int i,j;
         for(i=0;i<n;i++){
         
    	for(j=0;j<n;j++)
         
         printf("%d ",tab[i][j]);
    
     
         printf("\n");}
         
    }  
    
    
    
    int main()
    {
        int tab[10][10];
        int i,j,n,i_max,max;
        
      
    	
    	srand(time(0));
        
        
        
        for(i=0;i<10;i++)
        for(j=0;j<10;j++)
        tab[i][j]=rand()%11-5;
        
        
    wyswietl(tab, 10);
    n=10;
    int k;
      for ( k = n-1; k > 0; k-- ){
    
        max = tab[0][0];
        i_max = 0;
        for ( i = 1; i <= k; i++ )
      for ( j = 1; j <= k; j++ )
          if ( tab[i][j] < max ){
            max = tab[i][j];
            i_max = j;
          }
        tab[i][i_max] = tab[i][k];
        tab[i][k] = max;
      }
     
      
      	wyswietl(tab, 10);
     
        printf("\n");	
        getchar();
        return 0;
            
    }
    Ostatnio zmieniony przez Ada$ Zawodowiec : 02-04-2014, 20:58

Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. [C++] Sortowanie stringów reprezentujących godzinę
    Przez Rzulf w dziale Programowanie
    Odpowiedzi: 7
    Ostatni post: 27-05-2015, 22:34
  2. C++ Sortowanie stringów.
    Przez Kokolik w dziale Programowanie
    Odpowiedzi: 8
    Ostatni post: 24-12-2014, 00:30
  3. [C++]Znajdowanie najkrótszej drogi
    Przez Tomi w dziale Szkoła i nauka
    Odpowiedzi: 5
    Ostatni post: 17-01-2013, 11:30
  4. Rozkmina-mail box-sortowanie loota
    Przez billy w dziale Tibia
    Odpowiedzi: 1
    Ostatni post: 05-12-2012, 20:29
  5. PS3 - sortowanie gier wg. zajebistości
    Przez camile w dziale Inne gry
    Odpowiedzi: 0
    Ostatni post: 06-05-2012, 17:28

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •