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

Losowanie liter

Ostatnio zmodyfikowano 2017-04-22 13:49
Autor Wiadomość
Beginner777
Temat założony przez niniejszego użytkownika
Losowanie liter
» 2017-04-16 02:23:35
Napisać program generujący napis będący losowym ciagiem małych liter, o losowej długości nie większej niż 20, a następnie informujący ile razy wystąpiły w napisie poszczególne znaki.
Jak wypisać ile razy wystąpiła każda litera oraz jak losować tylko małe litery?

C/C++
#include<iostream>
#include<ctime>
#include<cstdlib>
using namespace std;
int main()
{
    string wyraz; string moja;
    srand( time( NULL ) );
    for( int i = 0; i <= 20; i++ )
    {
        wyraz = rand() % 25 + 65;
        moja = moja + wyraz;
    }
    cout << moja;
    for( int i = 0; i < moja.size(); i++ )
         moja[ i ];
   
    cout << moja << "ma:" << i;
   
    return 0;
}
P-160180
mokrowski
» 2017-04-16 11:55:40
C/C++
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>

using namespace std;

int main()
{
    static const int iloscLiter = 'z' - 'a';
   
    string wyraz;
    string moja;
    srand( time( NULL ) );
   
    for( int i = 0; i < 20; ++i )
    {
        wyraz = rand() %( iloscLiter + 1 ) + 'a';
        moja = moja + wyraz;
    }
   
    cout << moja << " ma:" << moja.size() << '\n';
}
Po niezbędnych poprawkach. Kod na poziomie "szkolnym" bo się uczysz.

Dla obliczenia częstości liter, zadeklaruj tablicę o wielkości iloscLiter, wypełnij ją zerami i przeglądając każdą literę z napisu, odejmij od niej kod znaku 'a' oraz inkrementuj wartość w tablicy częstości liter.
Na końcu pozostanie tylko wypisanie. Znak to będzie index + kod litery 'a' a ilość wystąpień z tablicy częstości wystąpień.
P-160185
Beginner777
Temat założony przez niniejszego użytkownika
» 2017-04-16 12:50:30
co znaczy static const ?
Dlaczego w losowaniu dodajemy 1 i a?
P-160186
mokrowski
» 2017-04-16 13:11:39
static const oznacza statyczną stałą. W tym przypadku jest to ilość liter od 'a' do 'z'. Z racji tego że każda z liter ma swój kod ASCII a litera 'a' występuje przed 'z' (czyli 'a' ma mniejszą wartość kodu), odejmowanie jest od 'z'.

Dla losowania używasz operatora % czyli modulo. Dla przykładu gdyby było 5 liter to modulo zwracało by zakres od 0 do 4 włącznie a potrzebujesz od 0 do 5 włącznie. Dlatego + 1 :-)

Indeks losowanej litery 'a' to 0 (zero). Jeśli chcesz uzyskać kod znaku, powinieneś dodać wartość kodu litery 'a'.
P-160187
Janusz2
» 2017-04-16 14:07:34
To pewnie oczywiste, ale w pętli for nie zapomnij zmienić 20 na zmienną o wartości z przedziału 1-20 :)
C/C++
int rozmiar = rand() %( 20 ) + 1;
for( int i = 0; i < rozmiar; ++i )
Dla treningu dokończyłem sobie to zadanie w taki sposób:
1. tworzę kopie stringu oraz zmienna x,
2. sprawdzam pierwszą literę z oryginału z każdą literą z kopii,
3. jeśli jest taka sama, to: x++ a literę z kopii zamieniam na znak z poza przedziału (np. 0),
4. jeśli po sprawdzeniu wszystkich liter z kopii x>0 wypisuje ile razy się pojawiło,
5. zeruję x, i robię to samo od pkt. 2 dla następnej litery z oryginału,
Nie wysyłałem kodu, bo na pewno chcesz to zrobić sam, ale w razie czego wyśle.
P-160188
TobiPL
» 2017-04-22 03:15:07
nie chce mi się czytac co napisaliście i czy dobrze... ale...


Wylosuj po prostu liczbę od 1 do 32... a następnie dodaj do niej 96...

Los(max 32, min 1)+96...

i losowałoby ci tylko małe litery...





#define LOS(min,max) ((rand()%(int)(((max)+1)-(min)))+(min))
char literki[20];

for(int i=0;i<20;i++)literki=LOS(1,32)+96;

chyba proste ;x...
przynajmniej Tobi by tak zrobil xDD
P-160347
mokrowski
» 2017-04-22 13:45:30
Mamy już XXI wiek a to jest C++. Generalnie od makr wymaga się teraz w C++ coraz mniej. Makro Los to bardzo zły pomysł, zły nawyk oraz proszenie się o problemy.
P-160354
mokrowski
» 2017-04-22 13:49:56
To pewnie oczywiste, ale w pętli for nie zapomnij zmienić 20 na zmienną o wartości z przedziału 1-20 :)
Wartości są prawidłowe w C i C++ indeksujemy struktury od 0 (zera).
P-160355
« 1 »
  Strona 1 z 1