Sortowanie bąbelkowe - nie działa poprawnie

0
#include <iostream>

using namespace std;

int main () {

	int t[10];
	int liczba; 

	for (int i=0; i<10; i++) 
	{
		cin>>liczba;
		liczba= t[i];
		cout<<liczba;

	}

	bool sorted=false;
	int ile=0;
	while(!sorted)

		sorted=true;
	for(int i=0; i<10; i++) {
		cout<< t[i]<<" ";
	}
	for(int i=0; i<9; i++) {
		if(t[i]>t[i+1]) {

			swap (t[i],t[i+1]);
			sorted=false;
		}
	}

ile++;

}
 

Cos mi nie pyklo, program ma pobrac od usera 10 liczb i je posortowac, jak zmienie kod i juz w kodzie wpisze te 10 liczb do dziala, w czym tkwi problem?

1

liczba= t[i]

Przypisanie działa z prawej do lewej. Czyli tutaj przypisujesz do wczytanej liczby niezainicjalizowaną wartość, powodując UB.

4

Zamień na:

for (int i=0; i<10; i++) 
{
        cin>>liczba;
        t[i] = liczba; //u ciebie jest: liczba= t[i];
        cout<<liczba;
 
} 
0
#include <iostream>

using namespace std;

int main () {

	int t[10];
	int liczba; 

	for (int i=0; i<10; i++) 
	{
		cin>>liczba;
	    t[i]=liczba;
	    cout<<liczba;

	}

	bool sorted=false;
	int ile=0;
	while(!sorted)

		sorted=true;
	for(int i=0; i<10; i++) {
		cout<< t[i]<<" ";
	}
	for(int i=0; i<9; i++) {
		if(t[i]>t[i+1]) {

			swap (t[i],t[i+1]);
			sorted=false;
		}
	}

ile++;

}
 

Zamienilem, ale zdaje sie, ze cos jeszcze nie gra, program dalej nie sortuje rosnaco :(

0
    while(!sorted)
        sorted=true;

Bez klamerek {} ta pętla jest równoważna

    while(!sorted) {
        sorted=true;
    }

Skorzystaj z debuggera, prześledź działanie programu

2

Dodaj nawiasy, aktualnei twoja pętla zawiera 2 linie

while(!sorted)
    sorted=true;

a ty chciałbyś sortować dopóki nieposortowane czyli:

while(!sorted){
    sorted=true;
    for(int i=0; i<10; i++) {
        cout<< t[i]<<" ";
    }
    for(int i=0; i<9; i++) {
        if(t[i]>t[i+1]) {
 
            swap (t[i],t[i+1]);
            sorted=false;
        }
    }
 
    ile++;
}
1
#include <iostream>
 
using namespace std;
 
int main () {
 
    int t[10];
    int liczba; 
 
    for (int i=0; i<10; i++) 
    {
        cin>>liczba;
        t[i]=liczba;
        cout<<liczba;
 
    }
 
    bool sorted=false;
    int ile=0;
    while(!sorted){
	
 
        sorted=true;
    for(int i=0; i<10; i++) 
	{
        cout<< t[i]<<" ";
    }
    for(int i=0; i<9; i++) 
	{
        if(t[i]>t[i+1]) 
		{
 
            swap (t[i],t[i+1]);
            sorted=false;
        }
    }
 
ile++;
}
 
}
  

Wzialem calego while'a w klamerki (wlacznie z ile++), ale wciaz jest zle.

okej, juz mam, wystarczylo dodac jednego cout<<endl; :)

Dzieki!

1 użytkowników online, w tym zalogowanych: 0, gości: 1