Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z losowanie c++

Ostatnio zmodyfikowano 2019-11-14 19:53
Autor Wiadomość
roku121
Temat założony przez niniejszego użytkownika
Problem z losowanie c++
» 2019-11-13 18:26:45
Cześć,

Mam problem, program losuje mi taką ilość liczb jaką wpiszę ale losuje jedną i wypisuje ją tyle razy ile podam.
Ja chcę by jak wpiszę 5, losowało 5 różnych liczb z zakresu 1-99.

C/C++
#include <iostream>
#include <vector>
#include <queue>
#include <list>
#include <stack>
#include <iomanip>

using namespace std;

int ilosc, i, j;


void zapytanie() {
    cout << "Podaj ilosc:" << endl;
    cin >> ilosc;
}

void losowanie() {
    int * tab = new int[ ilosc ];
    srand(( unsigned ) time( NULL ) );
    for( i = 0; i < ilosc; i++ ) tab[ ilosc ] = rand() % 100;
   
    for( i = 0; i < ilosc; i++ ) cout << setw( 4 ) << tab[ ilosc ];
   
    cout << endl;
}


int main()
{
    zapytanie();
    losowanie();
}
P-175556
nanoant20
» 2019-11-13 19:15:42
Losowanie bez powtórzeń
Twoje zmienne
int ilosc, i, j;

nie muszą być globalne, możesz je przesyłać jako argument funkcji
Funkcje, a słowo kluczowe return
P-175558
roku121
Temat założony przez niniejszego użytkownika
Pomoc w sortowaniu
» 2019-11-13 19:59:32
Dzięki twojej pomocy poradziłem sobie z sortowanie (tak myślę :D)

Muszę teraz posortować wylosowane liczby metodą wybierania, w następujący sposób:


Input 43 41 41 1 56 97 55 41
----------------
41 43| 41 1 56 97 55 41
41 41 43| 1 56 97 55 41
41 41 1 43| 56 97 55 41
41 41 1 43 56| 97 55 41
41 41 1 43 56 97| 55 41
41 41 1 43 56 55 97| 41
41 41 1 43 56 55 41 97|
----------------
Result 41 41 1 43 56 55 41 97

Czy mógłbyś mi pomóc?
Albo naprowadzić jak się za to zabrać?

C/C++
#include <iostream>
#include <vector>
#include <iomanip>

using namespace std;

int ilosc;

void zapytanie() {
    cout << "Podaj ilosc:" << endl;
    cin >> ilosc;
}


void losowanie() {
   
    srand( time( NULL ) );
    int tab[ 100 ];
   
    for( int i = 0; i < ilosc; i++ )
    {
        tab[ i ] = rand() % 100;
        for( int j = 0; j < i; j++ )
        {
            while( tab[ j ] == tab[ i ] )
            {
                tab[ i ] = rand() % 100;
            }
        }
    }
    for( int i = 0; i < ilosc; i++ )
    {
        cout << setw( 4 ) << tab[ i ];
    }
}


int main()
{
    zapytanie();
    losowanie();
}
P-175559
nanoant20
» 2019-11-13 20:16:11
Muszę teraz posortować wylosowane liczby metodą wybierania
Sortowanie danych
P-175560
roku121
Temat założony przez niniejszego użytkownika
» 2019-11-13 20:26:36
Nie potrafię tego zastosować do liczb wylosowanych w funkcji "losowanie".
Pomożesz?
P-175561
nanoant20
» 2019-11-13 21:05:43
//EDIT
poprawiłem Twój program,
C/C++
void losowanie()
{
    //jak tworzymy tablice dynamiczna,
    //to nie zapomnij jej usuac na koncu
    int * tab = new int[ ilosc ];
   
    srand(( unsigned ) time( NULL ) );
   
    for( int i = 0; i < ilosc; )
    {
        // wylosowanie liczby
        tab[ i ] = rand() % 99 + 1; // tu ma być zakres 1-99
        // sprawdzenie, czy sie ona nie powtarza
        bool bPowtarzaSie = false;
       
        for( int k = 0; k < i; ++k )
        {
            if( tab[ k ] == tab[ i ] )
            {
                bPowtarzaSie = true;
                break;
            }
        }
        // jezeli sie nie powtarza, przechodzimy do nastepnej liczby
        if( !bPowtarzaSie ) ++i;
       
    }
    //wypisywanie przed sortowaniem
    for( int i = 0; i < ilosc; i++ )
    {
        cout << setw( 4 ) << tab[ i ];
    }
    cout << endl;
    //sortowanie
    for( int i = 0; i < ilosc; i++ )
    {
        int k = i;
        for( int j = i + 1; j < ilosc; j++ )
        if( tab[ j ] < tab[ k ] )
             k = j;
       
        swap( tab[ k ], tab[ i ] );
    }
    //wypisywanie
    for( int i = 0; i < ilosc; i++ )
    {
        cout << setw( 4 ) << tab[ i ];
    }
   
    //usuwamy tablice
    delete[] tab;
}
P-175563
roku121
Temat założony przez niniejszego użytkownika
» 2019-11-14 19:53:34
Super dziękuję, już zaczynam to rozumieć.

Ale mam jeszcze problem, potrzebuję żeby zostały wypisane kolejne kroki sortowania np.

C/C++
Input 43 41 41 1 56 97 55 41
----------------
41 43 | 41 1 56 97 55 41
41 41 43 | 1 56 97 55 41
41 41 1 43 | 56 97 55 41
41 41 1 43 56 | 97 55 41
41 41 1 43 56 97 | 55 41
41 41 1 43 56 55 97 | 41
41 41 1 43 56 55 41 97 |
----------------
Result 41 41 1 43 56 55 41 97

Którą tablicę i w którym miejscu powinienem wypisać?

Oki, poradziłem sobie, zrobiłem coś takiego:

C/C++
/*
* =====================================================================================
*
*       Filename:  cw1.cpp
*
*    Description:  Example CPP hello world application
*
*        Version:  1.0
*        Created:  19.03.2019 22:23:08
*       Revision:  none
*       Compiler:  gcc
*
*         Author:  Lucjan Bryndza (LB), lbryndza.p@boff.pl
*   Organization:  BoFF
*
* =====================================================================================
*/

#include <iostream>
#include <vector>
#include <iomanip>

using namespace std;

int ilosc;

void zapytanie() {
    cout << "Ilosc cyfr do wylosowania:" << endl;
    cin >> ilosc;
    cout << "\n";
}

void losowanie()
{
    int * tab = new int[ ilosc ];
   
    srand(( unsigned ) time( NULL ) );
   
    for( int i = 0; i < ilosc; )
    {
        tab[ i ] = rand() % 99 + 1;
        bool bPowtarzaSie = false;
       
        for( int k = 0; k < i; ++k )
        {
            if( tab[ k ] == tab[ i ] )
            {
                bPowtarzaSie = true;
                break;
            }
        }
        if( !bPowtarzaSie ) ++i;
       
    }
    cout << "Wylosowany zestaw cyfr: \n";
    for( int i = 0; i < ilosc; i++ )
    {
       
        cout << setw( 4 ) << tab[ i ];
    }
    cout << endl;
    cout << "\n";
    cout << "Pośrednie kroki sortowania:" << endl;
    for( int i = 0; i < ilosc; i++ )
    {
        int k = i;
        for( int j = i + 1; j < ilosc; j++ )
       
        if( tab[ j ] < tab[ k ] )
             k = j;
       
        swap( tab[ k ], tab[ i ] );
       
       
       
        for( int i = 0; i < ilosc; i++ ) {
            cout << setw( 4 ) << tab[ i ];
        }
        cout << "\n";
       
    }
    cout << "\n";
    cout << "Posortowany zestw cyfr:" << endl;
    for( int i = 0; i < ilosc; i++ )
    {
        cout << setw( 4 ) << tab[ i ];
    }
   
    delete[] tab;
}

int main()
{
    zapytanie();
    losowanie();
}
P-175576
« 1 »
  Strona 1 z 1