• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Sortowanie bąbelkowe wskaźniki

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
+1 głos
109 wizyt
pytanie zadane 28 listopada w C i C++ przez adam234345 Początkujący (360 p.)

Chce aby wyświetlano 2 razy 20 losowych liczb, ale za drugim razem były posortowane nie malejąco, gdzie tu jest błąd? Z góry dzięki za pomoc

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

void sortowanie(int n, int *T)
{

    int i,j,x;
    for (i=1; i<n; i++)
    {
       for (j=n-1; j>=i; j--)
        if (T[j-1]>T[j])
       {
           x=T[j];
           T[j]=T[j-1];
           T[j-1]=x;
       }
    }

}

int main()
{

    srand(time(0));

    int *p;

    p = (int*)malloc(20*sizeof(int));

    int najwieksza=-100, najmniejsza=100;
    int druganajwieksza=-99, druganajmniejsza=99;

    for(int i=0; i<20; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));

        printf("%d ",  *(p+i));

    }

    printf("\n");

    for(int i=0; i<20; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));


        int n=20;
        sortowanie(n, (p+i));
        printf("%d ",  *(p+i));


    }

    free(p);

    return 0;
}


 

komentarz 28 listopada przez reaktywny Nałogowiec (44,780 p.)
W jakim celu napisałeś ten kod, linie: 32, 33, 47?? Dlaczego sortowanie jest w pętli for (45)? Linia 37 (47 też) dziwnie wygląda.

Musisz przemyśleć jeszcze raz swój program. Chyba tylko funkcja sortowanie jest OK, ale też nie mam pewności. Nie sprawdzałem kodu.

Wydaje mi się, że chciałeś posortować liczby wylosowane wcześniej w pierwszej pętli i wyświetlić nieposortowane i posortowane osobno? Inaczej będziesz miał różne zestawy liczb :) Chyba, ze to było celem?
komentarz 28 listopada przez adam234345 Początkujący (360 p.)
Mają być różne zestawy liczb
komentarz 28 listopada przez adam234345 Początkujący (360 p.)
linie 32 i 33 zostały z poprzedniego programu, ich nie powinno tam być
komentarz 28 listopada przez reaktywny Nałogowiec (44,780 p.)
OK. sortowanie(n, (p+i));powinno być poza pętlą, a int n= 20 dałbym na samym początku i wykorzystał wielokrotnie.
komentarz 28 listopada przez reaktywny Nałogowiec (44,780 p.)
Odpaliłem program i dostałem:

48 55 -29 -30 -21 95 89 -15 21 69 54 -95 59 -84 -47 22 -61 85 -93 39
 -4 -64 -84 -15 -45 -95 -96 -96 -47 -29 90 -97 --9 -74 39 54-8 69 20 -87
1
komentarz 28 listopada przez adam234345 Początkujący (360 p.)
gdy sortowanie jest poza pętlą jest problem z i, które zostało wprowadzone przy pętli, i co znaczy wykorzystać wielokrotnie? podmienić tam gdzie jest 20 na n?
komentarz 28 listopada przez reaktywny Nałogowiec (44,780 p.)
Napisałem poniżej w odpowiedzi, wkleiłem kod.

1 odpowiedź

0 głosów
odpowiedź 28 listopada przez reaktywny Nałogowiec (44,780 p.)
wybrane 28 listopada przez adam234345
 
Najlepsza

Proponuje taki kod (nie jest idealny, ale działa):

 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>
 
void sortowanie(int n, int *T)
{
 
    int i,j,x;
    for (i=1; i<n; i++)
    {
       for (j=n-1; j>=i; j--)
        if (T[j-1]>T[j])
       {
           x=T[j];
           T[j]=T[j-1];
           T[j-1]=x;
       }
    }
 
}
 
int main()
{
 
    srand(time(0));
 
    int *p;
    int *r;
    int N = 20;
 
    p = (int*)malloc(N*sizeof(int));
    r = (int*)malloc(N*sizeof(int));
    
    printf("Wylosowane nieposortowane: \n");
    for(int i=0; i<N; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));
 
        printf("%d ",  *(p+i));
 
    }
 
    printf("\n");
 
    printf("Wylosowane nieposortowane - II zestaw: \n");
    for(int i=0; i<N; i=i+1)
    {
        *(r+i)=-99+rand()%(100-(-99));
        printf("%d ",  *(r+i));

    }
 
    sortowanie(N, r);
 
    printf("\nPosortowane - II zestaw: \n");
    
    for(int i=0; i<N; i=i+1)
    {
        printf("%d ",  *(r+i));
    }
 
    free(p);
    free(r);
 
    return 0;
}

 

komentarz 28 listopada przez adam234345 Początkujący (360 p.)

Wielkie dzięki, teraz działa, przerobiłem tą moją wersje i nawet działa bez dodawania zmiennej r 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<time.h>

void sortowanie(int n, int *T)
{

    int i,j,x;
    for (i=1; i<n; i++)
    {
       for (j=n-1; j>=i; j--)
        if (T[j-1]>T[j])
       {
           x=T[j];
           T[j]=T[j-1];
           T[j-1]=x;
       }
    }

}

int main()
{

    srand(time(0));

	int *p;
	int n=20;
	p = (int*)malloc(20*sizeof(int));

	for(int i=0; i<n; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));

        printf("%d ",  *(p+i));
    }

    printf("\n");
    printf("\n");




  for(int i=0; i<n; i=i+1)
    {
        *(p+i)=-99+rand()%(100-(-99));
        printf("%d ",  *(p+i));
    }

        printf("\n");
        printf("\n");



    sortowanie(n, p);
    for(int i=0; i<n; i=i+1)
    {
        printf("%d ",  *(p+i));
    }


    free(p);

    return 0;
}


 

komentarz 28 listopada przez reaktywny Nałogowiec (44,780 p.)
Można i tak.

Jeszcze możesz popracować nad zapisem: -99+rand()%(100-(-99));

I to: p = (int*)malloc(20*sizeof(int)); jest stary zapis, dziś już się inaczej robi tablicę int-ów. Chyba, ze to C, a nie C++ ??

Na koniec detal:

printf("\n");

printf("\n");

zastąp:

printf("\n\n");   :)
komentarz 28 listopada przez reaktywny Nałogowiec (44,780 p.)

Podobne pytania

0 głosów
1 odpowiedź 1,418 wizyt
pytanie zadane 18 grudnia 2018 w C i C++ przez pysiek Początkujący (280 p.)
0 głosów
1 odpowiedź 716 wizyt
pytanie zadane 24 października 2021 w C i C++ przez pita Nowicjusz (180 p.)
0 głosów
1 odpowiedź 948 wizyt
pytanie zadane 2 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)

93,182 zapytań

142,196 odpowiedzi

322,002 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 1889p. - dia-Chann
  2. 1864p. - Łukasz Piwowar
  3. 1847p. - CC PL
  4. 1843p. - Łukasz Eckert
  5. 1805p. - Tomasz Bielak
  6. 1785p. - Michal Drewniak
  7. 1777p. - Łukasz Siedlecki
  8. 1774p. - rucin93
  9. 1744p. - rafalszastok
  10. 1724p. - Adrian Wieprzkowicz
  11. 1684p. - Mikbac
  12. 1624p. - Anonim 3619784
  13. 1520p. - Marcin Putra
  14. 1368p. - ssynowiec
  15. 1258p. - Dawid128
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...