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

[lekcja 21]Problem z zadaniem domowym

Ostatnio zmodyfikowano 2013-05-04 15:43
Autor Wiadomość
Matix8741
Temat założony przez niniejszego użytkownika
[lekcja 21]Problem z zadaniem domowym
» 2013-05-04 14:22:43
Chodzi o pierwsze zadanie.
Napisz program, który wczyta 3 liczby podane przez użytkownika do tablicy, a następnie wylosuje 2 z nich bez powtórzeń. Wynik wypisz na ekran. Postaraj się napisać ten program w oparciu o funkcje.
Napisałem program może trochę nie praktyczny ze względu na dużą ilość if-ów przy większej ilości losowanych liczb. Przejrzałem kod ze 3 razy i w tej wersji nie mogę znaleźć błędu, a można wpisać tylko 2 liczby i losuje dowolną liczbę tzn. bez wcześniej podanych ograniczeń. Proszę o pomoc bo tu nawet nie chodzi o to, że nie mogę lub mi się nie chce pisać programu od nowa, ale chcę zrozumień w czym rzecz.
C/C++
#include <ctime>
#include <cstdlib>
#include <iostream>
int wpisz( int a )
{
    int liczby[ 3 ];
   
    do
    {
        std::cin.clear();
        std::cin.sync();
        std::cin >> liczby[ a ];
    } while( std::cin.fail() ==!false );
   
    return liczby[ a ];
}
int losuj( int max, int min )
{
    return( rand() % max ) + min;
}
int main()
{
    srand( time( NULL ) );
    int liczba = 0;
    int los[ 3 ];
    int a = 0;
    int maks;
    int mini;
    int wylos[ 2 ];
    std::cout << "wpisz trzy liczby do wylosowania!" << std::endl;
    do
    {
        wpisz( liczba );
        los[ a ] = wpisz( liczba );
        a++;
        liczba++;
    } while( a > 3 );
   
    if( los[ 0 ] >= los[ 1 ] && los[ 2 ] )
         maks = los[ 0 ];
    else
    if( los[ 1 ] >= los[ 0 ] && los[ 2 ] )
         maks = los[ 1 ];
    else
         maks = los[ 2 ];
   
    if( los[ 0 ] <= los[ 1 ] && los[ 2 ] )
         mini = los[ 0 ];
    else
    if( los[ 1 ] <= los[ 0 ] && los[ 2 ] )
         mini = los[ 1 ];
    else
         mini = los[ 2 ];
   
    a = 0;
    wylos[ 0, 1 ] = losuj( maks, mini );
    std::cout << "wylosowane: " << wylos[ 0 ];
    if( wylos[ 0 ] == los[ 2 ] )
    {
        do
        {
            std::cout << "wylosowane: " << wylos[ 1 ];
        } while( wylos[ 1 ] == los[ 2 ] );
       
    }
    if( wylos[ 0 ] == los[ 1 ] )
    {
        do
        {
            std::cout << "wylosowane: " << wylos[ 1 ];
        } while( wylos[ 1 ] == los[ 1 ] );
       
    }
    if( wylos[ 0 ] == los[ 0 ] )
    {
        do
        {
            std::cout << "wylosowane: " << wylos[ 1 ];
        } while( wylos[ 1 ] == los[ 0 ] );
       
    }
    return 0;
}
P-81995
pekfos
» 2013-05-04 15:09:28
można wpisać tylko 2 liczby
Bo pętla, w której wczytujesz nie ma sensu.

losuje dowolną liczbę tzn. bez wcześniej podanych ograniczeń
Jakich ograniczeń? Kod jest w ogóle nie na temat. Przeczytaj dokładnie treść zadania.
P-82001
Matix8741
Temat założony przez niniejszego użytkownika
co?
» 2013-05-04 15:19:21
Jeżeli chodzi o treść zadania to: użytkownik ma wpisać 3 liczby, np. 5000, 2000 i 1000,a program ma wylosować dwie z nich, np. 1000 i 2000(bez powtórzeń tzn. np. 2x1000) i następnie wypisać je na ekran czy nie? A co do pętli to chodzi Ci o pętle w funkcji int wpisz, czy w int main ? 
P-82003
pekfos
» 2013-05-04 15:27:36
C/C++
do
{
    wpisz( liczba ); //wczytujesz pierwszą
    los[ a ] = wpisz( liczba ); //wczytujesz drugą
    a++;
    liczba++;
} while( a > 3 ); // koniec, bo warunek bez sensu


użytkownik ma wpisać 3 liczby, np. 5000, 2000 i 1000,a program ma wylosować dwie z nich, np. 1000 i 2000(bez powtórzeń tzn. np. 2x1000) i następnie wypisać je na ekran czy nie?
Tak. Twój program robi co innego. Zamiast wylosować 2 liczby z podanych przez użytkownika, losujesz dowolną liczbę z zakresu podanego przez użytkownika.
P-82005
Matix8741
Temat założony przez niniejszego użytkownika
» 2013-05-04 15:43:04
Ok, wielkie dzięki już rozumiem ! zamykam temat.
P-82008
« 1 »
  Strona 1 z 1