C - kalkulator na dużych liczbach, działania pisemne
: 28 grudnia 2007, 22:21
Więc tak pisze program razem z kolegą wykonujący pisemnie mnożenie, dodawanie, odejmowanie i dzielenie. Doszliśmy do czegoś co powinno działać, a okazuje się że nie daje rady program aż w jednym miejscu.
Wywala mi bład że
nie ma odpowiednich zmiennych, które wykorzystuje ta funkcja do której się to odnosi.
Ja nie wiem gdzie tkwi ten błąd co jest nie tak zadeklarowane-> po części ze względu na uboższą wiedzę odnośnie C niż mój kolega posiada, w sumie on sam nie wie dlaczego to nie działa tak jak powinno.
Nie wiem co to da ale poniżej umieszczam cały kod programu. I z góry bardzo dziękuje za pomoc w tym
A jeśli jest możliwość tego uproszczenia to bardzo ale to bardzo prosiłbym o sugestie -> toż to jest mały sajgon tam ?
Wywala mi bład że
Kod: Zaznacz cały
returnValue = get_value(returnValue, actions[i], input[j]);
Ja nie wiem gdzie tkwi ten błąd co jest nie tak zadeklarowane-> po części ze względu na uboższą wiedzę odnośnie C niż mój kolega posiada, w sumie on sam nie wie dlaczego to nie działa tak jak powinno.
Nie wiem co to da ale poniżej umieszczam cały kod programu. I z góry bardzo dziękuje za pomoc w tym
A jeśli jest możliwość tego uproszczenia to bardzo ale to bardzo prosiłbym o sugestie -> toż to jest mały sajgon tam ?
Kod: Zaznacz cały
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<ctype.h>
# define MAX 4
// do sprawdzania czy akcja jest ok
int is_valid_action( char action )
{
if ( action == '+' || action == '-' || action == '*' || action == '/' || action == '=' )
{
return 1;
}
return 0;
}
// tutaj liczymy całość
// jedziemy po tablicy input i wg odpowiedniego klucza tablicy actions wykonujemy dane matematyczne działanie
int do_calc( int input[], char actions[] )
{
int i, j, returnValue, firstCall = 0;
for ( i = 0; i < sizeof(input); i++)
{
// potrzebne zeby wziasc I element z tablicy input, potem returnValue przechowuje juz wykonane działania
// tzn mamy działanie 10+60*2 czyli za pierwszym razem returnValue = 10; przy i=1; returnValue = 60;
if ( firstCall == 0 )
{
returnValue = input[i];
firstCall = 1;
}
// tutaj wykonujemy działania, czyli returnValue przechowuje ostatnią wartość działania lub za I przebiegiem For, I element tablicy,
// actions[i] - jaka akcje wykonać
// input[j] - nastpna wartość w talibcy input czyli np. to nasze 60 w I przebiegu funkcji FOR ;
returnValue = get_value(returnValue, actions[i], input[j]);
j++;
}
return returnValue;
}
// tutaj dokładnie wykonujesz działania, chyba nie trzegba szczegoółowo omawiac
int get_value( int current, char action, int nextValue )
{
switch ( action )
{
case '+':
return current + nextValue;
break;
case '-':
return current - nextValue;
break;
case '*':
return current * nextValue;
break;
case '/':
return current / nextValue;
break;
default:
printf("Error: brak akcji \n");
return 0;
break;
}
}
int main(void)
{
char
actions[MAX], action;
int
input[MAX], inputIndex = 0, actionIndex, i;
printf("Welcome to SimpleCalc v 0.1.0.0 \n");
printf("Podaj pierwszą liczbę \n");
scanf("%s", &action);
while( action != '=' )
{
printf("Wybierz działanie ( '+', '-', '*', '/' ) \n");
scanf("%s", &action);
if (isxdigit(action)) // sprawdzam czy dodać wartość do liczenia
{
input[inputIndex] = atoi(action);
inputIndex++;
if (inputIndex > (actionIndex + 1) ) // ten potworek jest żeby wsio sie zgadzało miedzy np. input[] i actions[]
{
actionIndex = actionIndex + 1;
}
}
else // czy dodać wpisaną komende jako akcje
{
if (is_valid_action(action))
{
actions[actionIndex] = action;
actionIndex++;
if (actionIndex > (inputIndex + 1)) // ten potworek jest żeby wsio sie zgadzało miedzy np. input[] i actions[]
{
inputIndex = inputIndex + 1;
}
}
else
{
printf("KERNEL PANIC: \n Niedozwolona akcja! \n");
return 0;
}
}
}
// sprawdzam czy mam dane, jak nie to koniec prog.
if (sizeof(input) == 0)
{
printf("Error: \n brak danych! \n");
return 0;
}
// wywal na screen wprowadzone dane i jakie operacje pokolei zrobilismy
for ( i = 0; i < sizeof(input); i++)
{
printf("%d \n", input[i]);
printf("%s \n", actions[i]);
}
// podsumowanie + rezultat do_calc czyli końcowe wyliczenia :d
printf("------------------------ \n\t\t %d", do_calc( input, actions ) );
// the end :P nice programist story :D
return 0;
}