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

Sortowanie bąbelkowe wskaźniki

+1 głos
635 wizyt
pytanie zadane 28 listopada 2024 w C i C++ przez adam234345 Początkujący (400 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 2024 przez reaktywny Nałogowiec (46,220 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 2024 przez adam234345 Początkujący (400 p.)
Mają być różne zestawy liczb
komentarz 28 listopada 2024 przez adam234345 Początkujący (400 p.)
linie 32 i 33 zostały z poprzedniego programu, ich nie powinno tam być
komentarz 28 listopada 2024 przez reaktywny Nałogowiec (46,220 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 2024 przez reaktywny Nałogowiec (46,220 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 2024 przez adam234345 Początkujący (400 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 2024 przez reaktywny Nałogowiec (46,220 p.)
Napisałem poniżej w odpowiedzi, wkleiłem kod.

1 odpowiedź

+1 głos
odpowiedź 28 listopada 2024 przez reaktywny Nałogowiec (46,220 p.)
wybrane 28 listopada 2024 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 2024 przez adam234345 Początkujący (400 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 2024 przez reaktywny Nałogowiec (46,220 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 2024 przez reaktywny Nałogowiec (46,220 p.)

Podobne pytania

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

93,788 zapytań

142,753 odpowiedzi

323,429 komentarzy

63,393 pasjonatów

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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...