Losowanie bez powtórzeń i dziwne wyniki losowania

0

Witam, do pewnego programu jest mi potrzebna funkcja losowania liczb od 0 do 26 bez powtórzeń, mam pewną funkcję, którą podam niżej, jednak czasami wylosowana liczba jest ujemna lub wychodząca poza zakres id 1 do 26, nie wiem co dalej z tym zrobić, będę wdzięczny za pomoc.

#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;

int losowanie()
{
    return(rand()%26+1);
}

int sprawdzanie( int liczba, int s[], int ile )
{
    int i = 0;
    if( ile == 0 )
         return false;

    do
    {
        if( s[ i ] == liczba )
             return true;

        i++;
    }
    while( i < 26 );

    return false;
}

int wypisywanie( int s[], int ile )
{
    int a = 1;
    ile = 0;
    do
    {
        cout << "Liczba " << a << " to: " << s[ ile ] << endl;
        a++;
        ile++;
    }
    while( ile < 26 );

}
int main()
{
    srand( time( 0 ) );
    unsigned liczba, ile = 0;
    int s[ 26 ];
    cout << "Losowanie liczb bez powtorzen" << endl;
    do
    {
        liczba = losowanie();
        if( sprawdzanie( liczba, s, ile ) == false )
             s[ ile ] = liczba;

        ile++;
    }
    while( ile < 26 );

    wypisywanie( s, ile );
    return 0;
}
 

A Oto wynik jednego z losowań(Na czerwono zaznaczone wyniki wykraczające poza przedział):
http://prntscr.com/8tg85x

0

Wartości masz przypadkowe, jak wylosujesz liczbę, która już jest.

 if( sprawdzanie( liczba, s, ile ) == false )
             s[ ile ] = liczba;
 
        ile++;

zamień na

 
if( sprawdzanie( liczba, s, ile ) == false )
{
        s[ ile ] = liczba; 
        ile++;
}

Inna sprawa, że chcesz zrobic losową permutację, zrobiłbym to inaczej, ale na początkowe rozwiązanie może być.

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