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

Tablice jednowymiarowe - zadanie.

Ostatnio zmodyfikowano 2011-06-29 19:13
Autor Wiadomość
nUUb
Temat założony przez niniejszego użytkownika
Tablice jednowymiarowe - zadanie.
» 2011-06-29 16:27:32
Kalkulator prosty:

C/C++
#include <iostream>
#include <conio.h>
using namespace std;
int wczytajLiczbe()
{
    double a;
    bool sprawdz1;
    cin >> a;
    sprawdz1 = cin.good();
    cin.clear();
    cin.sync();
    if( sprawdz1 == false )
    do
    {
        cout << "To nie jest cyfra, sprobuj jeszcze raz" << endl;
        cout << "Wprowadz pierwsza liczbe: " << endl;
        cin >> a;
        sprawdz1 = cin.good();
        cin.clear();
        cin.sync();
    } while( sprawdz1 == false );
   
    return a;
}
int wczytajLiczbe2()
{
    double b;
    bool sprawdz1;
    cin >> b;
    sprawdz1 = cin.good();
    cin.clear();
    cin.sync();
    if( sprawdz1 == false )
    do
    {
        cout << "To nie jest cyfra, sprobuj jeszcze raz" << endl;
        cout << "Wprowadz druga liczbe: " << endl;
        cin >> b;
        sprawdz1 = cin.good();
        cin.clear();
        cin.sync();
    } while( sprawdz1 == false );
   
    return b;
}
int main()
{
    int zmienna;
    bool sprawdz3;
   
    cout << "Wprowadz pierwsza liczbe: ";
    double liczba = wczytajLiczbe();
    cout << "Wprowadz druga liczbe: ";
    double liczba2 = wczytajLiczbe2();
    cout << "================================" << endl;
    cout << "|     WYBIERZ TYP OPERACJI     |" << endl;
    cout << "| [1] Dodawanie                |" << endl;
    cout << "| [2] Odejmowanie              |" << endl;
    cout << "| [3] Mnozenie                 |" << endl;
    cout << "| [4] Dzielenie                |" << endl;
    cout << "| [5] Zakoncz program          |" << endl;
    cout << "================================" << endl;
    do
    {
        zmienna =( zmienna > 0 && zmienna <= 5 );
        cout << "Wybierz typ operacji: ";
        cin >> zmienna;
        sprawdz3 = cin.good();
        cin.clear();
        cin.sync();
        if( sprawdz3 == false )
        do
        {
            cout << "Nie ma takiej operacji" << endl;
            cout << "Wybierz typ operacji: ";
            cin >> zmienna;
            sprawdz3 = cin.good();
            cin.clear();
            cin.sync();
        } while( sprawdz3 == false );
       
        switch( zmienna )
        {
        case 1:
            cout << "Wynik dodawania: " << liczba + liczba2 << endl;
            break;
        case 2:
            cout << "Wynik odejmowania: " << liczba - liczba2 << endl;
            break;
        case 3:
            cout << "Wynik mnozenia: " << liczba * liczba2 << endl;
            break;
        case 4:
            if( liczba2 != 0 )
                 cout << "Wynik dzielenia: " << liczba / liczba2 << endl;
            else
                 cout << "Przepraszamy, nie mozna wykonac dzielenia przez 0" << endl;
           
            break;
            default:
            cout << "Nie ma takiej operacji" << endl;
            break;
        }
    } while( zmienna != 5 );
   
    getch();
    return 0;
}

Losowanie - gra

C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>

using namespace std;
int main()
{
    int wylosowanaLiczba =( rand() % 1001 ) + 1;
    int zgadywanaLiczba;
    bool poprawnosc;
    int liczbaStrzalow = 0;
   
    cout << "============================" << endl;
    cout << "|       TOTTO LOTTO        |" << endl;
    cout << "|                          |" << endl;
    cout << "|  Witaj w grze, w ktorej  |" << endl;
    cout << "|    twoim celem jest      |" << endl;
    cout << "|   odgadniecie liczby     |" << endl;
    cout << "|z przedzialu od 1 do 1000 |" << endl;
    cout << "|                          |" << endl;
    cout << "|   !!! ZACZYNAJMY !!!     |" << endl;
    cout << "============================" << endl << endl;
    do
    {
        cout << "Wylosowana liczba to: ";
        cin >> zgadywanaLiczba;
        poprawnosc = cin.good();
        cin.clear();
        cin.sync();
        if( poprawnosc == false )
        do
        {
            cout << "Niestety, to nie jest nawet liczba, sprobuj jeszcze raz" << endl;
            cout << "Wylosowana liczba to: ";
            cin >> zgadywanaLiczba;
            poprawnosc = cin.good();
            cin.clear();
            cin.sync();
        } while( poprawnosc == false );
       
        if( zgadywanaLiczba > 1000 || zgadywanaLiczba < 1 )
             cout << "Musisz podac liczbe z zakresu od 1 do 1000" << endl;
        else
             liczbaStrzalow++;
       
        if( zgadywanaLiczba > wylosowanaLiczba )
             cout << "Wylosowana liczba jest mniejsza, sprobuj ponownie!" << endl;
       
        if( zgadywanaLiczba < wylosowanaLiczba )
             cout << "Wylosowana liczba jest wieksza, nie poddawaj sie!" << endl;
       
    } while( wylosowanaLiczba != zgadywanaLiczba );
   
    cout << endl << endl << "GRATULACJE! UDALO CI SIE!" << endl << endl << "Wylosowana liczba: " << wylosowanaLiczba << endl;
    cout << "Ilosc twoich prob: " << liczbaStrzalow << endl;
    getch();
    return 0;
}

Tablice jednowymierowe:

C/C++
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
    srand( time( NULL ) );
    int liczba[ 998 ];
    int licznik = 0;
    cout << "Wylosowane liczby: " << endl << endl;
    do
    {
        liczba[ licznik ] =( rand() % 7 ) + 4;
        cout << liczba[ licznik ] << endl << endl;
        licznik++;
    } while( licznik < 998 );
   
    cout << "Dodane wszystkie wylosowane liczby: " << endl << endl;
    do
    {
        cout << liczba[ licznik ] + liczba[ licznik++ ];
        licznik++;
    } while( licznik < 997 );
   
    return 0;
}

Tak więc, wkleiłem tutaj trzy kody źródłowe z 3 różnych zadań, ale najbardziej interesuje mnie pytanie dotyczące tablic dlatego też taki temat.

Zaczynając:

1. Kalkulator prosty - stworzyłem tam dwie funkcje osobne dla liczb a i b, pytanie czy dało się to jakoś połączyć żeby kod był krótszy? Czy to normalne, że z każdym kolejnym programem ilośc lini kodu będzie się zwiększała kilka razy?

2. Losowanie - gra - chce się tylko upewnić, jak chce zrobić zakres od 1 (włącznie) do 1000 (włącznie) to należy to zapisać tak:
( rand() % 1001 ) + 1
 czy tak
( rand() % 1000 ) + 1

3. Dodawanie wszystkie wylosowanych liczb jest napisane poprawnie? Jeśli nie, to poprosiłbym o jakąś wskazówkę.

P-34931
DejaVu
» 2011-06-29 16:45:48
C/C++
cout << liczba[ licznik ] + liczba[ licznik++ ];
Kto Ciebie tego nauczył? (to jest źle)
P-34935
Dawidsoni
» 2011-06-29 16:50:37
1. Tak można zrobić z tego 1 funkcję. Wywal teksty: "Podaj 1 liczbę" i "Podaj 2 liczbę" z funkcji i wstaw je przed ich wywołaniem. Potem 1 z funkcji usuń i jest OK.
2. To poprawne: ( rand() % 1000 ) + 1
3. Wprowadź zmienną suma, która za każdym obejściem 1 pętli będzie powiększała się o wylosowaną liczbę.
P-34939
nUUb
Temat założony przez niniejszego użytkownika
Re:
» 2011-06-29 16:50:54
Cóż, uczę się tylko z tego kursu, więc nikt mnie tego nie nauczył. Pomysł na taki zapis pojawił mi się po prostu w głowie, jak widać niepoprawnie.
P-34940
ison
» 2011-06-29 17:01:43
1. Kalkulator prosty - stworzyłem tam dwie funkcje osobne dla liczb a i b, pytanie czy dało się to jakoś połączyć żeby kod był krótszy?
tak jak Dawidsoni lub
C/C++
void wczytajLiczbe( int & liczba_do_wczytania ) //int, double czy co tam wolisz
{
    bool sprawdz1;
    cin >> liczba_do_wczytania;
    sprawdz1 = cin.good();
    cin.clear();
    cin.sync();
    if( sprawdz1 == false )
    do
    {
        cout << "To nie jest cyfra, sprobuj jeszcze raz" << endl;
        cout << "Wprowadz pierwsza liczbe: " << endl;
        cin >> liczba_do_wczytania;
        sprawdz1 = cin.good();
        cin.clear();
        cin.sync();
    } while( sprawdz1 == false );
   
}
C/C++
int liczba, liczba2;
cout << "Wprowadz pierwsza liczbe: ";
wczytajLiczbe( liczba );
cout << "Wprowadz druga liczbe: ";
wczytajLiczbe( liczba2 );
Żeby zrozumieć powyższy kod jak działa i dlaczego działa poczytaj o referencjach

Czy to normalne, że z każdym kolejnym programem ilośc lini kodu będzie się zwiększała kilka razy?
z kolejnym czyli z kolejnym zadaniem na tej stronie? Zazwyczaj jest tak, że jeśli program jest bardziej skomplikowany to jest dłuższy, aczkolwiek zawsze dany problem da się rozwiązać na wiele sposobów, więc należy szukać tego najoptymalniejszego; z czasem niektóre kody, które kiedyś zajmowały 100 linii będą teraz zajmowały 10 linii

2. Losowanie - gra - chce się tylko upewnić, jak chce zrobić zakres od 1 (włącznie) do 1000 (włącznie) to należy to zapisać tak:
( rand() % 1001 ) + 1
 czy tak
( rand() % 1000 ) + 1
to drugie :)
P-34943
Elaine
» 2011-06-29 17:14:16
C/C++
int wczytajLiczbe( int & liczba_do_wczytania ) //int, double czy co tam wolisz
{
    bool sprawdz1;
    cin >> liczba_do_wczytania;
    sprawdz1 = cin.good();
    cin.clear();
    cin.sync();
    if( sprawdz1 == false )
    do
    {
        cout << "To nie jest cyfra, sprobuj jeszcze raz" << endl;
        cout << "Wprowadz pierwsza liczbe: " << endl;
        cin >> liczba_do_wczytania;
        sprawdz1 = cin.good();
        cin.clear();
        cin.sync();
    } while( sprawdz1 == false );
   
}
A teraz zrób to samo, tylko poprawnie i bez powtarzania kodu.
P-34946
ison
» 2011-06-29 17:23:33
Sorki, skopiowałem kod nie zauważyłem, już poprawione ;)
P-34949
Elaine
» 2011-06-29 17:30:28
Ciągle nie działa poprawnie (hint: http://cpp0x.pl/forum/temat/?id=3143) i ciągle masz powtórzenia.
P-34950
« 1 » 2
  Strona 1 z 2 Następna strona