To jest tylko wersja do druku, aby zobaczyć pełną wersję tematu, kliknij TUTAJ
Forum Oficjalnego Klubu Mitsubishi - MitsuManiaki

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ą? :wink: 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. :roll:

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. :wink:


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. :roll: 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. :D 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. :oops: Chyba nie macie nic przeciwko, żeby od czasu do czasu udzielać mi korków z programowania? :wink:
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ć
Kod:
moja_suma
, bo nie bardzo rozumiem tą zmienną? :wink:



Powered by phpBB modified by Przemo © 2003 phpBB Group