ulysses Temat założony przez niniejszego użytkownika |
zadanie 18.6.4 kalkulator » 2010-09-10 09:08:03 Witam Moj problem dotyczy zadania jeszcze ze starego kursu. Tresc zadania: 4.* Zaprojektuj kalkulator, który będzie wykonywać wszystkie działania matematyczne jakie znasz. Dodatkowo ma mieć możliwość obliczenia pola i obwodów wszystkich znanych ci figur geometrycznych. Dla lepszej wizualizacji, proponuje stworzyć ciekawy interfejs oparty o bibliotekę DDT. Wszystkie operacje podczas działanie programu mają być zapisane w pliku. Czyli jeżeli użytkownik włączył program zrobił dodawanie i obliczył pole jakiejś figury i zakończył program, to wszystko co wykonał ma być zapisane w pliku o nazwie jaką sam wymyślisz. Dobrze by było by zapisane dane to te, które użytkownik widzi na ekranie podczas obsług programu. Wykorzystaj wszystkie poznane zagadnienia by napisać spójny i przyjazdy dla użytkownika program. |
Program nie jest jeszcze w pelni dopracowany, tzn. do pliku nie zostaja zapisane jeszcze wszystkie czynnosci wykonywane przez uzytkownika oraz nie ma pelnych zabezpieczen przez wprowadzaniem glupstw przez uzytkownika ale to sie dopracuje. Moj problem dotyczy zadeklarowania jednej zmiennej typu string w funkcji int funkcja(int *poziom,int *pion, string menu_1[3]) |
. Jezeli nie zadeklaruje zmiennej wewnatrz tej funkcji program dziala prawidlowo, natomiast jezeli ja zadeklaruje program dziala nie tak jak powinien, tzn powinien przejsc do kolejnego menu. Moze ktos wie gdzie tkwi problem. Prezentuje kod programu: #include <iostream> #include <conio.h> #include "ddtconsole.h" #include <cstdio> #include <cmath> #include <fstream>
using namespace std; using namespace ddt::console;
int funkcja( int *, int *, string[] ); void Menu(); void Kursor( int, int );
void Menu_dzialania_matematyczne(); int dzialania_matematyczne( int *, int *, string[] );
int dodawanie( int );
void zapis( string );
int main() { int poziom = 26, pion = 10; int poziom_m = 26, pion_m = 10; int zwracanie_funkcji; int zwracanie_funkcji_operacje_matematyczne; string menu_1[ 4 ] = { "Wybrano obliczenia matematyczne", "Wybrano obliczanie pol", "Wybrano inne operacje", "KONIEC PROGRAMU", }; string menu_2[ 8 ] = { "Wybrales dodawanie", "Wybrales odejmowanie", "Wybrales mnozenie", "Wybrales dzielenie", "Wybrales potegowanie", "Wybrales pierwiastkowanie", "Wybrales obliczanie reszty z dzielenia", "POWROT DO MENU GLOWNEGO", }; zapis( "\n\n!!!ROZPOCZECIE PROGRAMU!!!" ); while(( zwracanie_funkcji = funkcja( & poziom, & pion, menu_1 ) ) != 27 ) { clrscr(); gotoxy( 25, 8 ); if( zwracanie_funkcji == 1 ) { while(( zwracanie_funkcji_operacje_matematyczne = dzialania_matematyczne( & poziom_m, & pion_m, menu_2 ) ) != 27 ) { clrscr(); gotoxy( 25, 8 ); if( zwracanie_funkcji_operacje_matematyczne > 0 && zwracanie_funkcji_operacje_matematyczne < 8 ) { cout << dodawanie( zwracanie_funkcji_operacje_matematyczne ); } getch(); } } else if( zwracanie_funkcji == 2 ) { cout << "FUNKCJA GLOWNA - OBLICZANIE POL\n"; } else if( zwracanie_funkcji == 3 ) { cout << "FUNKCJA GLOWNA - INNE\n"; } getch(); } return 0; }
int funkcja( int * poziom, int * pion, string menu_1[ 3 ] ) { int znak; do { Menu(); Kursor( * poziom, * pion ); znak = getch(); if( znak == 224 ) { znak = getch(); } switch( znak ) { case 72: { if( * pion == 10 ) { * pion = 12; } else { ( * pion ) --; } break; } case 75: { break; } case 77: { break; } case 80: { if( * pion == 12 ) { * pion = 10; } else { ( * pion ) ++; } break; } case 13: { clrscr(); if( * poziom == 26 &&* pion == 10 ) { cout << menu_1[ 0 ]; zapis( menu_1[ 0 ] ); return 1; } else if( * poziom == 26 &&* pion == 11 ) { cout << menu_1[ 1 ]; zapis( menu_1[ 1 ] ); return 2; } else if( * poziom == 26 &&* pion == 12 ) { cout << menu_1[ 2 ]; zapis( menu_1[ 2 ] ); return 3; } break; } case 27: { clrscr(); cout << menu_1[ 3 ]; zapis( menu_1[ 3 ] ); return 27; break; } } } while( znak != 27 ); }
void Menu() { clrscr(); gotoxy( 35, 8 ); cout << "Wybierz zadanie"; gotoxy( 30, 10 ); cout << "1 - Operacje matematyczne"; gotoxy( 30, 11 ); cout << "2 - Obliczanie pol figur"; gotoxy( 30, 12 ); cout << "3 - Inne dzialania"; }
void Kursor( int poziom, int pion ) { gotoxy( poziom, pion ); cout << "-->"; }
void Menu_dzialania_matematyczne() { clrscr(); gotoxy( 30, 10 ); cout << "1 - dodawanie"; gotoxy( 30, 11 ); cout << "2 - odejmowanie"; gotoxy( 30, 12 ); cout << "3 - mnozenie"; gotoxy( 30, 13 ); cout << "4 - dzielenie"; gotoxy( 30, 14 ); cout << "5 - potegowanie"; gotoxy( 30, 15 ); cout << "6 - pierwiastkowanie"; gotoxy( 30, 16 ); cout << "7 - reszta z dzielenia"; } int dzialania_matematyczne( int * poziom_m, int * pion_m, string menu_2[ 8 ] ) { string w; int znak; do { Menu_dzialania_matematyczne(); Kursor( * poziom_m, * pion_m ); znak = getch(); if( znak == 224 ) { znak = getch(); } switch( znak ) { case 72: { if( * pion_m == 10 ) { * pion_m = 16; } else { ( * pion_m ) --; } break; } case 75: { break; } case 77: { break; } case 80: { if( * pion_m == 16 ) { * pion_m = 10; } else { ( * pion_m ) ++; } break; } case 13: { clrscr(); if( * poziom_m == 26 &&* pion_m == 10 ) { cout << menu_2[ 0 ]; zapis( menu_2[ 0 ] ); return 1; } else if( * poziom_m == 26 &&* pion_m == 11 ) { cout << menu_2[ 1 ]; zapis( menu_2[ 1 ] ); return 2; } else if( * poziom_m == 26 &&* pion_m == 12 ) { cout << menu_2[ 2 ]; zapis( menu_2[ 2 ] ); return 3; } else if( * poziom_m == 26 &&* pion_m == 13 ) { cout << menu_2[ 3 ]; zapis( menu_2[ 3 ] ); return 4; } else if( * poziom_m == 26 &&* pion_m == 14 ) { cout << menu_2[ 4 ]; zapis( menu_2[ 4 ] ); return 5; } else if( * poziom_m == 26 &&* pion_m == 15 ) { cout << menu_2[ 5 ]; zapis( menu_2[ 5 ] ); return 6; } else if( * poziom_m == 26 &&* pion_m == 16 ) { cout << menu_2[ 6 ]; zapis( menu_2[ 6 ] ); return 7; } break; } } } while( znak != 27 ); zapis( menu_2[ 7 ] ); return 27; }
int dodawanie( int a ) { char liczba[ 10 ]; int liczba_1, liczba_2; do { cout << " ('k' konczy operacje)\nWprowadz 1 liczbe:\n"; cin >> liczba; cin.get(); } while( liczba[ 0 ] != 'k' &&( !isdigit( liczba[ 0 ] ) ) &&( !isdigit( liczba[ 1 ] ) ) ); if( liczba[ 0 ] != 'k' &&( isdigit( liczba[ 0 ] ) ) ||( isdigit( liczba[ 1 ] ) ) ) { sscanf( liczba, "%d", & liczba_1 ); do { cout << "Wprowadz 2 liczbe:\n"; cin >> liczba; cin.get(); } while( liczba[ 0 ] != 'k' &&( !isdigit( liczba[ 0 ] ) ) &&( !isdigit( liczba[ 1 ] ) ) ); if( liczba[ 0 ] != 'k' ||( isdigit( liczba[ 0 ] ) ) &&( isdigit( liczba[ 1 ] ) ) ) { sscanf( liczba, "%d", & liczba_2 ); } switch( a ) { case 1: { cout << liczba_1 << "+" << liczba_2 << "="; return liczba_1 + liczba_2; break; } case 2: { cout << liczba_1 << "-" << liczba_2 << "="; return liczba_1 - liczba_2; break; } case 3: { cout << liczba_1 << "*" << liczba_2 << "="; return liczba_1 * liczba_2; break; } case 4: { if( liczba_2 != 0 ) { cout << liczba_1 << "/" << liczba_2 << "="; return liczba_1 / liczba_2; } else { cout << "Nie podziele przez 0!!!"; return false; } break; } case 5: { cout << liczba_1 << "^2" << "="; return pow( liczba_1, 2 ); break; } case 6: { cout << "pierwiastek z " << liczba_1 << "="; return sqrt( liczba_1 ); break; } case 7: { cout << liczba_1 << "%" << liczba_2 << "="; return liczba_1 % liczba_2; break; } } } else { } }
void zapis( string w ) { ofstream zapis; zapis.open( "logi.txt", ios::out | ios::binary | ios::app ); if( zapis.is_open() ) { cout << "Poprawnie zaladowano plik"; zapis << w << endl; zapis.close(); } else { cout << "ERROR\n"; } }
Pozdrawiam Jacek |