Problem z kalkulatorem i wskaźnikami

Odpowiedz Nowy wątek
2011-07-07 18:47
0

Witam,

dopiero zaczynam swoją przygode z C++, przeczytałem sporo książek dochodząc jednak do granicy programowania zwykłego a obiektowego (nie zacząłem klas)

napisałem pierwszy klakulator, który... no, nie chce się skompilować. Nienawidzę wskaźników, ale specjalnie nieoptymalnie podzieliłem program na funkcje ze wskaźnikami żeby się ich nauczyć. Help please...

PS jeśli to zły dział to przepraszam, przenieście. Nie chce robić spamu, ale też nie kasujcie tego

#include <iostream>
#include <windows.h>
 
using namespace std;
 
float *wsk1, *wsk2;
 
float dodawanie(*wsk1, *wsk2);
float odejmowanie(*wsk1, *wsk2);
float mnozenie(*wsk1, *wsk2);
float dzielenie(*wsk1, *wsk2);
std::string PL(std::string znak);
int inny();
 
int main()
{
    system("cls");
    cout << PL("Witaj w kalkulatorze :) \n");
    cout << PL("Wybierz operacje na liczbach:\n");
    cout << PL("\t 1. Dodawanie\n");
    cout << PL("\t 2. Odejmowanie\n");
    cout << PL("\t 3. Mnożenie\n");
    cout << PL("\t 4. Dzielenie\n");
    cout << PL("\t 5. Potęgowanie\n");
    cout << PL("\t 6. Pierwiastkowanie\n");
    cout << PL("\t 7. Wyjście\n");
 
    int wybor;
    float Liczba1, Liczba2;
    float m;
    cin >> wybor;
    switch(wybor)
    {
        case 1:
        {
            m = dodawanie(&Liczba1, &Liczba2);
            break;
        }
        case 2:
        {
            m = odejmowanie(&Liczba1, &Liczba2);
            break;
        }
        case 3:
        {
            m = mnozenie(&Liczba1, &Liczba2);
            break;
        }
        case 4:
        {
            m = dzielenie(&Liczba1, &Liczba2);
            break;
        }
        case 5:
        {
            m = potega(&Liczba1, &Liczba2);
            break;
        }
        case 6:
        {
            m = pierwiastek(&Liczba1, &Liczba2);
            break;
        }
        case 7:
        {
            system("cls");
            cout << PL("Kalkulator bY Lisu 2011 ");
            cout << "\u00A9";
            system("pause");
            break;
        }
        default:
        {
            system("cls");
            inny();
            break;
        }
 
    system("pause");
}
 
int inny()
{
    cout << PL("Nie ma takiej opcji! Prosze wybrać właściwy numer.\n\n");
    cout << PL("Co chcesz teraz zrobić?\n");
    cout << PL("\t1. Chce jeszcze raz! :)\n");
    cout << PL("\t2. Wyjście");
    int klawisz;
    cin >> klawisz;
    if(klaiwsz==2)
        return ((ShellExecute(NULL, NULL, "kalkulator.exe", NULL, NULL, SW_SHOWNORMAL) || 0));
    elseif(klawisz==1)
        close();
    else
    {   
        clrscr();
        inny();
    }
}
 
float dodawanie(*Liczba1, *Liczba2)
{
    system("cls");
    cout << PL("Dodawanie:");
    cout << PL("\tPodaj pierwszą liczbę (może być ułamek)");
    cin >> *Liczba1;
    cout << PL("\tPodaj drugą liczbę (może być ułamek)");
    cin >> *Liczba2;
    return (*Liczba1+*Liczba2)
}
 
float odejmowanie(*Liczba1, *Liczba2)
{ return 1.0;
}
 
float mnozenie(*Liczba1, *Liczba2){
    return 1.0;
    }
 
float dzielenie(*Liczba1, *Liczba2){return 1.0;}
 
float potega(*Liczba1, *Liczba2){return 1.0;}
 
float pierwiastek(*Liczba1, *Liczba2){
    return 1.0;
    }
 
std::string PL(std::string znak)
{
        for (unsigned i = 0; i < znak.length(); i ++)
        {
                switch(znak[i])
                {
                        case 'ą':
                                znak[i] = static_cast<char>(165);
                        break;
 
                        case 'ć':
                                znak[i] = static_cast<char>(134);
                        break;
 
                        case 'ę':
                                znak[i] = static_cast<char>(169);
                        break;
 
                        case 'ł':
                                znak[i] = static_cast<char>(136);
                        break;
 
                        case 'ń':
                                znak[i] = static_cast<char>(228);
                        break;
 
                        case 'ó':
                                znak[i] = static_cast<char>(162);
                        break;
 
                        case 'ś':
                                znak[i] = static_cast<char>(152);
                        break;
 
                        case 'ź':
                                znak[i] = static_cast<char>(171);
                        break;
 
                        case 'ż':
                                znak[i] = static_cast<char>(190);
                        break;
 
                        case 'Ą':
                                znak[i] = static_cast<char>(164);
                        break;
 
                        case 'Ć':
                                znak[i] = static_cast<char>(143);
                        break;
 
                        case 'Ę':
                                znak[i] = static_cast<char>(168);
                        break;
 
                        case 'Ł':
                                znak[i] = static_cast<char>(157);
                        break;
 
                        case 'Ń':
                                znak[i] = static_cast<char>(227);
                        break;
 
                        case 'Ó':
                                znak[i] = static_cast<char>(224);
                        break;
 
                        case 'Ś':
                                znak[i] = static_cast<char>(151);
                        break;
 
                        case 'Ź':
                                znak[i] = static_cast<char>(141);
                        break;
 
                        case 'Ż':
                                znak[i] = static_cast<char>(189);
                        break;
                }
        }
        return znak;
}

proszę o szybką pomoc, i ewentualne podświetlenie błędów wraz z wyjaśnieniem czemu tak a nie inaczej

Z góry dziękuje,

młody (przyszły) programista.

PS Jako że wyskoczyło mi tyle błędów, poprawnie zrobiłem tylko dodawanie...

edytowany 1x, ostatnio: Ktos, 2011-07-07 18:53

Pozostało 580 znaków

2011-07-07 19:44

float dodawanie(wsk1, wsk2);
float odejmowanie(wsk1, wsk2);
float mnozenie(wsk1, wsk2);
float dzielenie(wsk1, wsk2);

Brakuje tu określena jakiego typu są argumentu funkcji. Powinno być
float dodawanie(float, float);
float odejmowanie(float, float);
float mnozenie(float, float);
float dzielenie(float, float);

Nazwy zmiennych wsk1 i wsk2 możesz wstawić w deklaracji funkcji lub pominąć, tak jak napisałem wyżej. Tak samo brak jest typu argumentów w definicjach funkcji:
float dodawanie(Liczba1, Liczba2)
{
....
}

a powinno być:
float dodawanie(float Liczba1, float Liczba2)
{
...
}

Pozostało 580 znaków

2011-07-07 19:52
0

dzięki zaraz sprawdzę

Pozostało 580 znaków

2011-07-07 21:04
0

dzięki, poprawiłem jeszcze 50 innych błędów i działa! :) Jeszcze problem z linkowaniem ale to przez te puste funkcje, odejmwanie, mnożenie itp...

Pozostało 580 znaków

2011-07-22 00:09
0

FreZZy, a czy nie lepiej (skoro cwiczysz) zrobic tablice wskaznikow funkcji? chodzi mi o to, ze skoro wszystkie Twoje funkcje sa typu float to mozesz wszystkie funkcje zapisac do jednego wskaznika

 float (*wsk[])(int*, int*) = {&dodawanie, &odejmowanie, &mnozenie, &dzielenie}; 

i zamiast instrukcji w case'ach mozesz napisac tak

case:1
case:2
case:3
case:4
wsk[wybor](&Liczba1, &Liczba2)
break;

chyba nic nie pomieszalem :)

edit. Wybaczcie za odkopanie tematu. Ale dopiero teraz spojrzalem na date...
Jeszcze raz przepraszam

edytowany 2x, ostatnio: fasadin, 2011-07-22 00:11

Pozostało 580 znaków

2011-07-24 10:01
Krzysiek
0

Heh a może wskaźnik powinien iść flame () 0123...89 ; ale nie obiecuje

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0