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

Własna funkcja wyświetlająca losowy napis

Ostatnio zmodyfikowano 2016-12-17 23:53
Autor Wiadomość
barkacpers
Temat założony przez niniejszego użytkownika
Własna funkcja wyświetlająca losowy napis
» 2016-12-17 20:33:49
Dzień dobry. Zacząłem programowąć w c++ od niedawna i mam problem odnośnie pewnej funkcji. Napisałem ją sam i niestety jest coś z nią nie tak, a ja nie mam pojęcia co. Mógłby ktoś coś doradzić albo nawet pokazać jak poprawić? Wrzucam kod:
Chciałbym dorzucić jeszcze że w osobnym programie konsola automatycznie przestaje działaś, a w głównym programie gdzie ma być zastosowana ta funkcja jest wyświetlany napis poprawnie lecz pod nim znajduje się pewna dziwna nierówność a mianowicie coś takiego: 0 < Ór˜
Nie wiem jak temu zaradzić dlatego szukam pomocy tutaj. Z góry dziękuję za wszystkie chęci wyrażenia pomocy i pozdrawiam serdecznie.
C/C++
string ekran_ladowania( string tipy )
{
    int liczba;
    srand( time( NULL ) );
    liczba = rand() % 10 + 1;
   
    if( liczba == 1 )
    {
        tipy = "opcja1";
    }
    else if( liczba == 2 )
    {
        tipy = "opcja2;
    }
    else if( liczba == 3 )
    {
        tipy = "opcja3";
    }
    else if( liczba == 4 )
    {
        tipy = "opcja4";
    }
    else if( liczba == 5 )
    {
        tipy = "opcja5";
    }
    else if( liczba == 6 )
    {
        tipy = "opcja6";
    }
    else if( liczba == 7 )
    {
        tipy = "opcja7";
    }
    else if( liczba == 8 )
    {
        tipy = "opcja8";
    }
    else if( liczba == 9 )
    {
        tipy = "opcja9";
    }
    else if( liczba == 10 )
    {
        tipy = "opcja10";
    }
    cout << tipy;
}
[ / cpp ]
P-155099
marcolo2307
» 2016-12-17 20:42:32
1.
[cpp]kod[/cpp]



2. Wrzuć te tipy w tablice i losuj indeks, wtedy zamienisz te wszystkie ify na
std::cout << tipy[ liczba ];

3. Skoro nic nie zwracasz, to dlaczego funkcja jest typu string? Pewnie robisz coś w stylu:
std::cout << ekran_ladowanie( "opcja" );
, więc wywołujesz funkcję i wyświetlasz to co zwracasz. Zmień ją na void lub zwróć coś.
P-155100
barkacpers
Temat założony przez niniejszego użytkownika
» 2016-12-17 20:56:31
Dziękuję ci poprawię na drugi raz z czytelnością postu. Z góry mówię że nie mam w głowie póki co ułożonego planu jak zrobić to pod tablicę. Czy mógłbyś zrobić jakiś przykład i mi go pokazać? Byłoby to dla mnie naprawdę pomocne. Mówiłem już że dopiero zacząłem z programowaniem, więc dzięki temu przykładowi mógłbym zrozumieć więcej. Jestem samoukiem co gorsza więc nie mam kogoś kto by mi powiedział o moich błędach w konsoli. Dziękuję również za poświęcony czas.
P-155101
marcolo2307
» 2016-12-17 21:00:04
Pokazałem ci jak zrobić to z użyciem tablicy. Musisz ją tylko stworzyć. http://cpp0x.pl/kursy/Kurs-C++​/Poziom-2​/Tablice-jednowymiarowe/292
P-155102
barkacpers
Temat założony przez niniejszego użytkownika
» 2016-12-17 21:02:48
A odnośnie typu void. Nie chcę mi to zbytnio działać a pewnie robię coś źle i potrzebuję pomocy. Moim skromnym zdaniem funkcja ta miała pokazywać napis ze zmiennej string. Przeniosłem to na tablice i w sumie dalej nie wiem co robić. Dołączam kod który stworzyłem od nowa:
C/C++
#include <iostream>
#include <conio.h>
#include <cstdlib>
#include <windows.h>
#include <stdio.h>
#include <math.h>
#include <clocale>
#include <ctime>

using namespace std;

string niewiem, tipy;

void ekran_ladowania()
{
    string ekran_lad[ 10 ];
    ekran_lad[ 0 ] = "opcja1";
    ekran_lad[ 1 ] = "opcja2";
    ekran_lad[ 2 ] = "opcja3";
    ekran_lad[ 3 ] = "opcja4";
    ekran_lad[ 4 ] = "opcja5";
    ekran_lad[ 5 ] = "opcja6";
    ekran_lad[ 6 ] = "opcja7";
    ekran_lad[ 7 ] = "opcja8";
    ekran_lad[ 8 ] = "opcja9";
    ekran_lad[ 9 ] = "opcja10";
   
    int liczba;
    srand( time( NULL ) );
    liczba = rand() % 10 + 1;
   
    if( liczba == 1 )
    {
        cout << ekran_lad[ 0 ] << endl;
    }
    else if( liczba == 2 )
    {
        cout << ekran_lad[ 1 ] << endl;
    }
    else if( liczba == 3 )
    {
        cout << ekran_lad[ 2 ] << endl;
    }
    else if( liczba == 4 )
    {
        cout << ekran_lad[ 3 ] << endl;
    }
    else if( liczba == 5 )
    {
        cout << ekran_lad[ 4 ] << endl;
    }
    else if( liczba == 6 )
    {
        cout << ekran_lad[ 5 ] << endl;
    }
    else if( liczba == 7 )
    {
        cout << ekran_lad[ 6 ] << endl;
    }
    else if( liczba == 8 )
    {
        cout << ekran_lad[ 7 ] << endl;
    }
    else if( liczba == 9 )
    {
        cout << ekran_lad[ 8 ] << endl;
    }
    else if( liczba == 10 )
    {
        cout << ekran_lad[ 9 ] << endl;
    }
}

int main()
{
    cout << ekran_ladowania();
    return 0;
}
P-155104
michal11
» 2016-12-17 21:54:35
Jaki jest sens tablic w twoim kodzie skoro dalej masz ifa na 10 pozycji?

C/C++
std::string GetRandomString()
{
    const int TabSize = 10;
   
    std::string tab[ TabSize ];
   
    for( int i = 0; i < TabSize; ++i )
    {
        tab[ i ] = "opcja" + std::to_string( i + 1 );
    }
   
    const int RandomIndex = rand() % TabSize;
   
    return tab[ RandomIndex ];

srand wołasz raz, na początku maina.

Edit.

jeżeli twoja funkcja ma zawsze zwracać ten sam tekst tylko z innym numerkiem to można to zrobić po prostu tak
C/C++
std::string RandomNumber( const std::string & base, int min, int max )
{
    return base + std::to_string( min +( std::rand() %( max - min + 1 ) ) );
}

a jeżeli chcesz mieć różne nazwy opcji no to niestety sam je musisz sobie wpisać ale losowanie zrobić tak jak w pierwszym moim kodzie.
P-155106
barkacpers
Temat założony przez niniejszego użytkownika
» 2016-12-17 22:04:54
Mógłbyś mi dokładnie opisać co dzieje się w każdej linijce? Średnio rozumiem jak mam to podstawić pod mój zamysł.
P-155107
marcolo2307
» 2016-12-17 23:53:43
C/C++
std::string GetRandomString() // funkcja
{
    const int TabSize = 10; // stała oznaczająca rozmiar tablicy
   
    std::string tab[ TabSize ]; // stworzenie tablicy
   
    for( int i = 0; i < TabSize; ++i ) // pętla jedzie po kolei po wszystkich elementach
    {
        tab[ i ] = "opcja" + std::to_string( i + 1 ); // każdy element = "opcja" + indeks "zamieniony na string"
    }
   
    const int RandomIndex = rand() % TabSize; // losuje liczbę od 0 do rozmiaru tablicy
   
    return tab[ RandomIndex ]; // zwraca wylosowaną pozycję

Drugi kod po prostu pobiera tekst jako argument i dopisuje do niego wylosowaną liczbę z przedziału.
P-155111
« 1 »
  Strona 1 z 1