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

Sortowanie bąbelkowe w C++

Object Storage Arubacloud
0 głosów
1,085 wizyt
pytanie zadane 12 czerwca 2020 w C i C++ przez ania1210 Nowicjusz (200 p.)

Mógłby ktoś pomóc mi z kodem? Wyskakują błędy i liczby nie są sortowane tak jak powinno to być. Jak zrobić, aby liczby były pokazywane przed i po sortowaniu?

#include <windows.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
 
using namespace std;
 
int tablos[10];
int ile;

 
void sortowanie_babelkowe(int *tab, int i)
{
    for(int n=1; n<i; n++)
    {
        for(int j=i-1; j>=1; j--)
        {
            if(tab[j]<tab[j-1])
            {
                int bufor;
                bufor=tablos[j-1];
                tablos[j-1]=tablos[j];
                tablos[j]=bufor;
            }
        }
    }
}
 
main ()
{
    int n,max,min,Sp,Sn;
    int tablos[10];
    
    char odp;
    
    srand(time(NULL));
    do
    {
        min=49;
        max=1;
        Sp=0;
        Sn=0;
        for (n=1; n<=10; n++)
        {
            tablos[n]=rand()%49;
            cout<<tablos[n]<<" ";
            Sleep (30);
            
            if(tablos[n]<min)
            min=tablos[n];
            
            if(tablos[n]>max)
            max=tablos[n];
            
            if(tablos[n]%2==0)
            Sp+=tablos[n];
            
            if(tablos[n]%2==1)
            Sn+=tablos[n];
            
        }
        
        cout<<endl;
        cout<<endl;
        cout<<"Najmniejsza liczba to "<<min;
        cout<<endl;
        cout<<"Najwieksza liczba to "<<max;
        cout<<endl;
        cout<<"Suma liczb parzystych wynosi "<<Sp;
        cout<<endl;
        cout<<"Suma liczb nieparzystych wynosi "<<Sn;
        cout<<endl;
        cout<< "----------------------"<<endl;
        cout<<"Czy zakonczyc? t/n" <<endl;
        cin>>odp;
    }
    while (odp=='n');
}

 

komentarz 12 czerwca 2020 przez VBService Ekspert (253,140 p.)
edycja 13 czerwca 2020 przez VBService


min = 1
max = 49

tablos[n]=rand()%max + min;

Tak na szybko 2 pierwsze błędy (3?). Patrz obrazek

 

2 odpowiedzi

0 głosów
odpowiedź 12 czerwca 2020 przez j23 Mędrzec (194,920 p.)
edycja 12 czerwca 2020 przez j23

for (n=1; n<=10; n++)

W C/C++ indeksuje się od zera. W tej pętli indeks n osiągnie wartość 10, co będzie wyjściem poza zakres tablicy tablos.

sortowanie_babelkowe operuje na dwóch tablicach tab i tablos. Powinna na tej pierwszej.

komentarz 13 czerwca 2020 przez ania1210 Nowicjusz (200 p.)

A jak zrobić, żeby pokazywano liczby przed i po sortowaniu? Bo próbuję i nic frown

komentarz 13 czerwca 2020 przez j23 Mędrzec (194,920 p.)
  1. wyświetlasz zawartość tablos używając pętli (przed sortowaniem)
  2. wywołujesz sortowanie_babelkowe
  3. wyświetlasz zawartość tablos używając pętli (po sortowaniu).
komentarz 13 czerwca 2020 przez ania1210 Nowicjusz (200 p.)
Wyświetlenie przed sortowaniem się udało, ale po niestety nie wychodzi, nie mam pojęcia jak to zrobić :/
komentarz 13 czerwca 2020 przez j23 Mędrzec (194,920 p.)
Pokaż kod.
komentarz 13 czerwca 2020 przez ania1210 Nowicjusz (200 p.)
#include <windows.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>
 
using namespace std;
 
int tablos[10];
int ile;

 
void sortowanie_babelkowe(int *tablos, int i)
{
    for(int n=0; n<i; n++)
    {
        for(int j=i-1; j>=1; j--)
        {
            if(tablos[j]<tablos[j-1])
            {
                int bufor;
                bufor=tablos[j-1];
                tablos[j-1]=tablos[j];
                tablos[j]=bufor;
            }
        }
    }
}
 
main ()
{
	int n,max,min,Sp,Sn;
	int tablos[10];
	
	char odp;
	
	srand(time(NULL));
	do
	{
		min=49;
		max=1;
		Sp=0;
		Sn=0;
		cout<<"Przed sortowaniem: "<<endl;
		for (n=0; n<=9; n++)
		{
			tablos[n]=rand()%49 +1;
			cout<<tablos[n]<<" ";
			Sleep (30);
			
				sortowanie_babelkowe(*tablos,i);
		for(int n=0; n<9; n++)
		cout << tablos[n] << endl;
			
			if(tablos[n]<min)
			min=tablos[n];
			
			if(tablos[n]>max)
			max=tablos[n];
			
			if(tablos[n]%2==0)
			Sp+=tablos[n];
			
			if(tablos[n]%2==1)
			Sn+=tablos[n];
		}
		
		cout<<endl;
		cout<<endl;
		cout<<"Najmniejsza liczba to "<<min;
		cout<<endl;
		cout<<"Najwieksza liczba to "<<max;
		cout<<endl;
		cout<<"Suma liczb parzystych wynosi "<<Sp;
		cout<<endl;
		cout<<"Suma liczb nieparzystych wynosi "<<Sn;
		cout<<endl;
		cout<< "----------------------"<<endl;
		cout<<"Czy zakonczyc? t/n" <<endl;
		cin>>odp;
	}
	while (odp=='n');
}

 

komentarz 13 czerwca 2020 przez j23 Mędrzec (194,920 p.)
edycja 13 czerwca 2020 przez j23

Dlaczego sortowanie (linia 50) i drugą pętlę (51) dałaś w pierwszej pętli (44)?

Dlaczego funkcji sortującej podajesz wartość *tablos zamiast tablos?

Dlaczego n <= 9, a nie po prostu n < 10.

Dlaczego pętla z linii 51 kręci się dziewięć razy, skoro elementów jest dziesięć.

0 głosów
odpowiedź 13 czerwca 2020 przez VBService Ekspert (253,140 p.)
edycja 13 czerwca 2020 przez VBService

#include <windows.h>
#include <iostream>
#include <time.h>
#include <stdlib.h>

using namespace std;

int tablos[10];
int ile; 

string ANSI_GREEN = "\u001B[32m";
string ANSI_RESET = "\u001B[0m";

void czysc_okno_cmd()
{
    cout << ("\033[H\033[2J");
}

void sortowanie_babelkowe(int *tablos, int i)
{
    for(int n=0; n<i; n++)
    {
        for(int j=i-1; j>=1; j--)
        {
            if(tablos[j]<tablos[j-1])
            {
                int bufor;
                bufor=tablos[j-1];
                tablos[j-1]=tablos[j];
                tablos[j]=bufor;
            }
        }
    }
}

void pokaz_dane(int* tablica, int ile)
{
    for(int i=0; i<ile; i++ )
    {
      cout << ANSI_GREEN << tablica[i] << ANSI_RESET << " ";
    } 
    cout << endl;
}

void losuj_liczby(int* tablica, int ile, int min, int max)
{
    srand(time(NULL));
    for(int i=0; i<ile; i++) tablica[i] = rand()%max + min;
}

int main ()
{
    int n,max,min,Sp,Sn;
    min=1;
    max=49;
    Sp=0;
    Sn=0;
    n=9;
    int tablos[n];

    char odp;
     
    czysc_okno_cmd();

    do
    {
      cout << endl;
      losuj_liczby(tablos, n, min, max);
      cout<<"Przed sortowaniem: ";
      pokaz_dane(tablos, n);
      Sleep (30);

      sortowanie_babelkowe(tablos,n);
      cout<<"Po sortowanu: ";
      pokaz_dane(tablos, n);

      for(int i=0; i<n; i++)
      {             
        if(tablos[i]%2==0)
        Sp+=tablos[i];
          
        if(tablos[i]%2==1)
        Sn+=tablos[i];
      }
         
        cout<<endl;
        cout<<"Najmniejsza liczba to "<<min;
        cout<<endl;
        cout<<"Najwieksza liczba to "<<max;
        cout<<endl;
        cout<<"Suma liczb parzystych wynosi "<<Sp;
        cout<<endl;
        cout<<"Suma liczb nieparzystych wynosi "<<Sn;
        cout<<endl;
        cout<< "-------------------------------"<<endl;
        cout<<"Czy zakonczyc? t/n" <<endl;
        cin>>odp;
    }
    while (odp=='n');
}


 

Podobne pytania

0 głosów
1 odpowiedź 797 wizyt
pytanie zadane 2 lutego 2021 w C i C++ przez Kamirru9 Początkujący (300 p.)
0 głosów
1 odpowiedź 352 wizyt
pytanie zadane 25 sierpnia 2019 w C i C++ przez martin1724 Użytkownik (690 p.)
0 głosów
1 odpowiedź 535 wizyt
pytanie zadane 24 października 2021 w C i C++ przez pita Nowicjusz (180 p.)

92,556 zapytań

141,404 odpowiedzi

319,561 komentarzy

61,942 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...