Usporiadanie čísel podľa veľkosti (začiatočník) – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Usporiadanie čísel podľa veľkosti (začiatočník) – C / C++ – Fórum – Programujte.comUsporiadanie čísel podľa veľkosti (začiatočník) – C / C++ – Fórum – Programujte.com

 

Zufalec0
Duch
10. 11. 2020   #1
-
0
-

Ahojte, som úplný začiatočník v programovaní a snažím sa naprogramovať usporiadanie náhodných čísel (od najväčšieho po najmenšie), ktoré som pred tým vygenerovala, pričom počet týchto čísel je možné zadať v príkazovom riadku. 

Podarilo sa mi vygenerovať náhodné čísla, no keď sa ich snažím usporiadať, nefunguje to. Nevypisuje mi žiadnu chybovú hlášku, ale napriek tomu tie čísla nezoradí.

Vie mi niekto vysvetliť, v čom robím chybu? 

#include <iostream>
#include <cstdlib> 
#include <ctime>									
#include <cassert>
#include <algorithm>

using namespace std;

int main() {

	int n = 0;									
	int i = 0;									
	int j = 0;
	int random_number = 0;							
	int* array = nullptr;

	cout << "Please enter a number: ";				
	cin >> n;							
	array = new int[n];						
	
	srand((unsigned)time(0));

	for (i = 0; i < n; i++) {						
		random_number = (rand() % n);			
								
		array[i] = random_number;				
		cout << array[i] << ' ';					
		if ((i + 1) % 10 == 0) {				
			cout << '\n';
		}
	} 

	return 0;

	// SORTING
	sort(array, array + n);
	for (j = 0; j < n; j++) {
	
		//cout << "Sorted array is:" << endl;
		cout << array[j] << " ";

	}
} 
Nahlásit jako SPAM
IP: 46.189.97.–
Zufalec0
Duch
10. 11. 2020   #2
-
0
-
Nahlásit jako SPAM
IP: 46.189.97.–
Zufalec0
Duch
10. 11. 2020   #3
-
0
-

#1 Zufalec
Problém bol v tom, že return 0; nebolo na správnom mieste. Trochu upravený (fungujúci kód) je:


#include <iostream>
#include <cstdlib> 
#include <ctime>									// define "time" in 32th row
#include <cassert>
#include <algorithm>

using namespace std;

int main() {

	//   CREATE AN ARRAY OF LENGTH "n" AND FILL IT WITH RANDOM NUMBERS


	int n = 0;										// size of an array at the beginning
	int	i = 0;										// for cycle
	int	j = 0;
	int	random_number = 0;							// random number at the beginning
	int* array = nullptr;

	cout << "Please enter a number: ";				// write the message for an user
	cin >> n;										// this allow to change n (in command line)
	array = new int[n];								// change n and save it to "array"
	
	srand((unsigned)time(0));

	for (i = 0; i < n; i++) {						// for cycle from i=0 to i=(n-1)
		random_number = (rand() % n);				/* generate a random number from 0 to n (I want to avoid the situation, 
													   when somebody write n too hight and I set up too small random n (there would be a lot of the same numbers)*/	
		array[i] = random_number;					// it fills array with random numbers
		cout << array[i] << ' ';					
		if ((i + 1) % 10 == 0) {					// write 10 numbers in one row (only for clarity)
			cout << '\n';
		}
	} 



	// SORTING
	cout << "Sorted array is:";
	sort(array, array + n);
	for (j = 0; j < n; j++) {
		cout << array[j] << " ";
		if ((j + 1) % 10 == 0) {					// write 10 numbers in one row (only for clarity)
			cout << '\n';
		}
	}
	return 0;
} 

Chcela by som sa ešte opýtať, ako sa dá usporiadať tie čísla tak, aby bolo splnené zadanie (teda aby som to neurobila pomocou "quick sort", ale tak, ako sa to odo mňa požaduje v zadaní. Ďakujem veľmi pekne za akúkoľvek pomoc. :) 

Nahlásit jako SPAM
IP: 46.189.97.–
BDS+3
Věrný člen
10. 11. 2020   #4
-
+1
-
Zajímavé

#3 Zufalec
netestoval jsem to, tak doufám že to bude fakčit správně: 

for (i = 1; i < n; i++)
{
  if (array[i] < array[i - 1])
  {
   v = array[i];
   j = i;
    do
     {
      array[j] = array[j - 1];
      array[j - 1] = v;
      j--;
     }
     while (j > 0 && v < array[j - 1]);
    }                
}
Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Zufalec0
Duch
10. 11. 2020   #5
-
0
-

#4 BDS
Vďaka za ochotu pomôcť, ale nefunguje to. Skúšala som to prepísať tak, ako je to v zadaní (viď nižšie), ale ani to nefunguje. Nevypisuje chybovú hlášku, ale vôbec nevypíše zoradené čísla.... Vôbec neruším, prečo.


#include <iostream>
#include <cstdlib> 
#include <ctime>									// define "time" in 32th row
#include <cassert>
#include <algorithm>

using namespace std;

int main() {

	//   CREATE AN ARRAY OF LENGTH "n" AND FILL IT WITH RANDOM NUMBERS


	int n = 0;										// size of an array at the beginning
	int	i = 0;										// for cycle
	int	j = 0;
	int k = 0;
	int	random_number = 0;							// random number at the beginning
	int* array = nullptr;

	cout << "Please enter a number: ";				// write the message for an user
	cin >> n;										// this allow to change n (in command line)
	array = new int[n];								// change n and save it to "array"

	srand((unsigned)time(0));

	for (i = 0; i < n; i++) {						// for cycle from i=0 to i=(n-1)
		random_number = (rand() % n);				/* generate a random number from 0 to n (I want to avoid the situation,
													   when somebody write n too hight and I set up too small random n (there would be a lot of the same numbers)*/
		array[i] = random_number;					// it fills array with random numbers
		cout << array[i] << ' ';
		if ((i + 1) % 10 == 0) {					// write 10 numbers in one row (only for clarity)
			cout << '\n';
		}
	}



	// SORTING
	cout << "Sorted array is:" << endl;
	int v = 0;

	for (i = 1; i < n; i++)
	{
		if (array[i] < array[i - 1])
		{
			v = array[i];
			j = i;
			do
			{
				array[j] = array[j - 1];
				j = j - 1;
			
			} while (j > 0 && v < array[j - 1]);
			array[j] = v;
		}
	}

	return 0;
} 
Nahlásit jako SPAM
IP: 46.189.97.–
BDS+3
Věrný člen
10. 11. 2020   #6
-
+1
-
Zajímavé

#5 Zufalec
dát na konec (před return) výpis položek tě nenapadlo? 

for (i = 0; i < n; i++) 
{
 cout << array[i] << ' ';
 if ((i + 1) % 10 == 0) cout << '\n';
}
Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Zufalec0
Duch
10. 11. 2020   #7
-
0
-

#6 BDS
Vôbec. :D  Ďakujem. 

Ja som sa to snažila vyriešiť podobne ako v https://www.geeksforgeeks.org/insertion-sort/, ale akosi mi to nefungovalo.

Dúfam, že postačí, ak to urobím tak, ako to bolo v zadaní. Síce je to dobrovoľná úloha, ale snažím sa robiť aj to, čo nemusím. :) 

Ešte raz veľká vďaka!

Nahlásit jako SPAM
IP: 46.189.97.–
BDS+3
Věrný člen
10. 11. 2020   #8
-
0
-

#7 Zufalec
n.z.

Nic proti, ale možná to zkus dělat víc samostatně, to by ti prospělo mnohem víc. Ne hledat řešení na netu, spíš na to jít logicky. Ptát se až na to, co by se dalo vylepšit na tvém řešení.

Nahlásit jako SPAM
IP: 185.69.68.–
W10 :)
Zufalec0
Duch
10. 11. 2020   #9
-
0
-

#8 BDS

Snažila som sa nad tým stráviť "pár" hodín. Nie som ten typ človeka, ktorý si necháva vypracovať úlohy na internete (študujem aplikovanú matiku, takže veľmi dobre viem, že ak sa chce človek niečo naučiť, tak si ma sadnúť na zadok a sedieť na ňom, kým to podľa možností nepochopí úplne všetko sám).  :)

Problém je v tom, že s programovaním v C++ začíname až zajtra, no dostali sme dobrovoľnú úlohu naprogramovať toto zadanie v akomkoľvek jazyku už minulý týždeň. Keďže ja som v programovaní úplne mimo (ledva som prešla skúškou z programovania v C# v prváku), tak som si povedala, že sa pokúsim nakodiť túto úlohu už v C++ a byť tak popredu oproti mojim spolužiakom. 

Ale veľmi pekne ďakujem, že si sa mi snažil pomôcť. Podľa mňa sa niečo naučím aj tým, že uvidím hotový kód a pochopím ho. Samozrejme, nedá mi to toľko, čo v prípade, že by som úplne všetko nakodila sama, ale lepšie, ako nič. Aspoň ten začiatok sa mi podarilo nakodiť bez pomoci. :) 

Nahlásit jako SPAM
IP: 46.189.97.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 17 hostů

Podobná vlákna

Usporiadanie pola Array — založil marek

Zmena velkosti pola — založil pascal-newbie

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý