Komputery, RTV, AGD, Komorki - C++; ktoś się orientuje?
KowaliK - 19-09-2011, 18:37 Temat postu: C++; ktoś się orientuje? Jak w temacie, temat dotyczy języka programowania C++. Są tutaj osoby, które dobrze sobie z nim radzą? Mam problem z napisaniem programu. Sprawa pewnie jest prosta ale niestety w szkole dostałem zadanie bez żadnych wskazówek, a próbując sposobów znalezionych w sieci do niczego nie udało mi się dojść. Problem mam z napisaniem programu wyświetlającego 10 losowych, parzystych liczb z przedziału od 50 do 100.
Próbowałem już czegoś takiego: Kod: | int main()
{
int wylosowana;
int min=50;
int max=100;
srand (time(NULL));
wylosowana = rand()%(max-min+1);
cout<<wylosowana<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
|
ale kompletnie nie działa, ponieważ komputer losuje liczby mniejsze od 50.
krzychu - 19-09-2011, 18:51
Wylosuj od 25 do 50 i pomnóż przy wyświetlaniu x2. Przy okazji dodaj pętlę
Nie mam teraz żadnego kompilatora C++ chyba, że chcesz kod w C#?
Próbuj tak:
Kod: | int main()
{
int wylosowana;
int min=50;
int max=100;
srand (time(NULL));
for (int i=0; i<10; i++)
{
wylosowana = (rand()%((max/2-min/2+1)+min/2))*2;
cout<<wylosowana<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
} |
Ale to tak z palca napisane.
KowaliK - 19-09-2011, 19:12
O proszę, nie spodziewałem się tak szybkiej odpowiedzi. To co podałeś owszem, losuje 10 liczb parzystych ale nie działa zakres 50 - 100.
krzychu - 19-09-2011, 19:27
Kod: | #include <ctime>
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int wylosowana;
int min=50;
int max=100;
srand (time(NULL));
for (int i=0; i<10; i++)
{
wylosowana = random((max-min)/2+1)*2+min;
cout<<wylosowana<<endl;
}
system("PAUSE");
return 0;
} |
jawlo - 19-09-2011, 19:48
Kod: | #include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <iostream>
using namespace std;
int main()
{
int wylosowana;
int min=50;
int max=100;
srand (time(NULL));
for (int i=0; i<10; i++)
{
wylosowana = min + (rand()%(max/2-min/2+1))*2 ;
cout<<wylosowana<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
//( value % 100 ) daje liczbe z przedziału 0 do 99
//( value % 100 + 1 ) daje liczbe z przedziału 1 do 100
//( value % 30 + 1985 ) daje liczbe z przedziału 1985 do 2014
|
kompilowane w Dev C++ (darmowy)
KowaliK - 19-09-2011, 20:18
krzychu, gdzieś tutaj jest błąd:
Kod: | wylosowana = random((max-min)/2+1)*2+min; |
zmieniłem już to w ten sposób:
Kod: | wylosowania = rand () % ((max-min)/2+1)*2+min; |
ale pojawia się jeszcze większy error.
jawlo, Twoja wersja kompiluje się bardzo długo i koniec końców też nie działa.
jawlo - 19-09-2011, 20:25
W jakim środowisku to sprawdzasz?
Windows XP + Dev C++ kompiluje poniżej 1s i działa.
krzychu - 19-09-2011, 20:40
KowaliK napisał/a: |
Kod: | wylosowana = random((max-min)/2+1)*2+min; |
|
No tak borland... zapomniałem że nie trzyma standardów...
Kod: | using namespace std;
int main()
{
int wylosowana;
int min=50;
int max=100;
srand (time(NULL));
for (int i=0; i<10; i++)
{
wylosowana = (rand()%((max-min)/2+1))*2+min;
cout<<wylosowana<<endl;
}
system("PAUSE");
return 0;
} |
Oba kody działają ma borlandzie... poprawnie. Zobacz czy dołączasz namespace i odpowiednie biblioteki. A najlepiej wklej błędy.
KowaliK - 19-09-2011, 21:16
Kompiluję na Viscie + Dev.
W tej chwili kompiluję ostatni kod, który wkleiłeś Krzyśku i od 4 minut stoi w miejscu. Mam cstdlib, iostream oraz ctime. Nie wiem co mogę robić źle... Otwieram to jako aplikacja na konsolę - dobrze?
jawlo - 19-09-2011, 21:30
Masz jakiś problem ze środowiskiem.
Vista niestety nie ma dobrych opinii.
Możesz skorzystać z kompilatora on-line:
http://ideone.com/
poczytaj ten wątek http://ii.yebood.com/viewtopic.php?t=2907
KowaliK - 19-09-2011, 21:37
Dziwne, dzisiaj kilka programów skompilowało mi się OK (tzn. ładowały się i pokazywało błędy) w tym momencie nie wiem co się stało. W ubiegłym tygodniu tez wszystko normalnie działało. Natomiast wg. tego kompilatora online, program działa bardzo cacy, chociaż pokazuje jakiś błąd z pauzą. Dzięki za link, jutro na spokojnie poczytam, bo dzisiaj mam jeszcze jedną rzecz do zrobienia ale na szczęście nie związaną z naszym tematem. Póki co, Panowie, wielkie dzięki za pomoc. Co prawda "plusy" będą marną rekompensatą ale zawsze coś - mam nadzieje, że uda mi się kiedyś normalnie odwdzięczyć. Niech temat nie spada za daleko, bo będę wracał tutaj częściej. Chyba nie macie nic przeciwko, żeby od czasu do czasu udzielać mi korków z programowania?
krzychu - 20-09-2011, 09:10
Ściągnij sobie Visual Studio C++ Express. Jest darmowy i na pewno dobrze działa z Vistą. Do tego ma świetny edytor.
http://www.microsoft.com/...ual-cpp-express
Potem będziesz miał też prosto przesiąść się na C#.
KowaliK - 22-09-2011, 17:52
Wracam z powrotem. Muszę napisać program losujący liczby z przedziału od 1 do 20, sumujący je ale suma musi być równa tej zadeklarowanej przez użytkownika. Użytkownik może podać maksymalną sumę = 100. Nie mam bladego pojęcia jak zrobić "inteligentną" pętlę, która sama dostosuje liczbę losowań do sumy wylosowanych liczb... Dodatkowo na końcu program musi wyświetlić w ilu losowaniach osiągnął podaną sumę. Próbowałem już kilku rzeczy, ale jedyne co do tej pory udało mi się zrobić, to dodać jedynie 2 wylosowane liczby do siebie ale mnie kompletnie nie urządza. Ma to wyglądać mniej więcej tak:
Użytkownik podaje liczbę 50, program losuje:
5 ;
10 - 15;
2 - 17;
8 - 25;
10 - 35;
20 - za duzo;
4 - 39;
15 - za duzo;
9 - 48;
4 - za duzo;
2 - 50;
Suma osiągnięta po 11 losowaniach.
Kod: |
#include <cstdlib>
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
int losowanie;
int min = 0;
int max = 20;
cout<<"Podaj sume wylosowanych liczb:"<< endl;
cin>>suma;
if (suma>=100)
cout<<"Suma musi byc mniejsza od 100!"<< endl;
srand (time(NULL));
for (int i=0; i<suma; i++)
{
losowanie = rand () % (max-min)+1;
cout<<losowanie<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
} |
jawlo - 22-09-2011, 18:50
Żeby nie było za łatwo podam tylko "środek".
Resztę musisz sam uzupełnić..
'
Kod: |
for (int i=0; moja_suma!=suma; i++)
{
losowanie = rand () % (max-min)+1;
cout<<losowanie<<endl;
if( (moja_suma+losowanie) > suma)
{
cout<< "liczba za duża" << endl;
continue; // zaczyna od początku pętli
}
moja_suma=moja_suma+losowanie;
}
|
KowaliK - 22-09-2011, 19:17
Mógłbyś wytłumaczyć , bo nie bardzo rozumiem tą zmienną?
|
|
|