C++; ktoś się orientuje? |
Autor |
Wiadomość |
KowaliK
Mitsumaniak 01339/KMM
Auto: JDM's
Kraj/Country: Polska
Pomógł: 6 razy Dołączył: 06 Sty 2008 Posty: 990 Skąd: Wrocław
|
Wysłany: 19-09-2011, 18:37 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
Mitsumaniak

Auto: Lancer 2.0 Int, Mazda CX-3
Zaproszone osoby: 1
Kraj/Country: Polska
Pomógł: 141 razy Dołączył: 21 Kwi 2008 Posty: 12607 Skąd: Bielsko-Biała
|
Wysłany: 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
Mitsumaniak 01339/KMM
Auto: JDM's
Kraj/Country: Polska
Pomógł: 6 razy Dołączył: 06 Sty 2008 Posty: 990 Skąd: Wrocław
|
Wysłany: 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
Mitsumaniak

Auto: Lancer 2.0 Int, Mazda CX-3
Zaproszone osoby: 1
Kraj/Country: Polska
Pomógł: 141 razy Dołączył: 21 Kwi 2008 Posty: 12607 Skąd: Bielsko-Biała
|
Wysłany: 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
Forumowicz
Auto: SS DiD mint silver
Kraj/Country: Polska
Pomógł: 17 razy Dołączył: 09 Sty 2006 Posty: 1196 Skąd: Beskidy
|
Wysłany: 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
Mitsumaniak 01339/KMM
Auto: JDM's
Kraj/Country: Polska
Pomógł: 6 razy Dołączył: 06 Sty 2008 Posty: 990 Skąd: Wrocław
|
Wysłany: 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
Forumowicz
Auto: SS DiD mint silver
Kraj/Country: Polska
Pomógł: 17 razy Dołączył: 09 Sty 2006 Posty: 1196 Skąd: Beskidy
|
Wysłany: 19-09-2011, 20:25
|
|
|
W jakim środowisku to sprawdzasz?
Windows XP + Dev C++ kompiluje poniżej 1s i działa. |
|
|
|
 |
krzychu
Mitsumaniak

Auto: Lancer 2.0 Int, Mazda CX-3
Zaproszone osoby: 1
Kraj/Country: Polska
Pomógł: 141 razy Dołączył: 21 Kwi 2008 Posty: 12607 Skąd: Bielsko-Biała
|
Wysłany: 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
Mitsumaniak 01339/KMM
Auto: JDM's
Kraj/Country: Polska
Pomógł: 6 razy Dołączył: 06 Sty 2008 Posty: 990 Skąd: Wrocław
|
Wysłany: 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
Forumowicz
Auto: SS DiD mint silver
Kraj/Country: Polska
Pomógł: 17 razy Dołączył: 09 Sty 2006 Posty: 1196 Skąd: Beskidy
|
|
|
|
 |
KowaliK
Mitsumaniak 01339/KMM
Auto: JDM's
Kraj/Country: Polska
Pomógł: 6 razy Dołączył: 06 Sty 2008 Posty: 990 Skąd: Wrocław
|
Wysłany: 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
Mitsumaniak

Auto: Lancer 2.0 Int, Mazda CX-3
Zaproszone osoby: 1
Kraj/Country: Polska
Pomógł: 141 razy Dołączył: 21 Kwi 2008 Posty: 12607 Skąd: Bielsko-Biała
|
Wysłany: 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
Mitsumaniak 01339/KMM
Auto: JDM's
Kraj/Country: Polska
Pomógł: 6 razy Dołączył: 06 Sty 2008 Posty: 990 Skąd: Wrocław
|
Wysłany: 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
Forumowicz
Auto: SS DiD mint silver
Kraj/Country: Polska
Pomógł: 17 razy Dołączył: 09 Sty 2006 Posty: 1196 Skąd: Beskidy
|
Wysłany: 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
Mitsumaniak 01339/KMM
Auto: JDM's
Kraj/Country: Polska
Pomógł: 6 razy Dołączył: 06 Sty 2008 Posty: 990 Skąd: Wrocław
|
Wysłany: 22-09-2011, 19:17
|
|
|
Mógłbyś wytłumaczyć , bo nie bardzo rozumiem tą zmienną? |
_________________
 |
|
|
|
 |
|