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? #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; }
|
|
mokrowski |
» 2017-04-16 11:55:40 #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ń. |
|
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? |
|
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'. |
|
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 :) 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. |
|
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 |
|
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. |
|
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). |
|
« 1 » |