Odpowiedz w wątku

Kalkulator w C

Autor Wiadomość
 Tytuł: Kalkulator w C
PostNapisane: 16 lut 2009, o 16:41 
Offline
-#
Avatar użytkownika

Dołączył(a): 24 lis 2007, o 16:03
Posty: 89
Witam, napisałem właśnie mój pierszy kalkulator :) Podspodem źródło. Chętnie wysłucham komentarzy 8)
Kod:
unsigned char liczba1, liczba2, dzialanie, wynik;
                                                 
printf("podaj liczbe 1: ");                     
scanf("%d", &liczba1);                           
printf("podaj liczbe 2: ");                     
scanf("%d", &liczba2);                           
printf("podaj dzialanie (* / + -) :");           
scanf("%c", &dzialanie);                         
                                                 
switch (dzialanie)                               
   {                                           
   case '*':                                   
      wynik = liczba1 * liczba2;               
      break;                                   
   case '/':                                   
      wynik = liczba1 / liczba2;               
      break;                                   
   case '+':                                   
      wynik = liczba1 + liczba2;               
      break;                                   
   case '-':                                   
      wynik = liczba1 - liczba2;               
      break;                                   
   }                                           
printf("wynik %d", wynik);


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 16 lut 2009, o 22:56 
Offline
-#
Avatar użytkownika

Dołączył(a): 2 sty 2009, o 14:38
Posty: 153
Troche to dziurawe, nie widzę default w switch co znaczy że jak ktoś poda inne działanie niż oczekiwane to wynik będzie jakąś przypadkową wartością ;)


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 17 lut 2009, o 12:16 
Offline
-#
Avatar użytkownika

Dołączył(a): 16 lis 2007, o 12:08
Posty: 736
Lokalizacja: Lucan
Typ wyniku powinien być na tyle duży by pomieścić wynik mnożenia obu liczb, a zarazem musi być to typ całkowity aby wynik dzielenia był podazany z dokładnością po przecinku np. float.

_________________
Sprawdź czy ktoś już nie zadał Twojego pytania.
Jeżeli pytasz, podaj jak najwięcej informacji.

Systemy dedykowane
Mini powłoka systemów dedykowanych


Obrazek


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 17 lut 2009, o 17:15 
Offline
-#
Avatar użytkownika

Dołączył(a): 4 lut 2009, o 18:56
Posty: 64
takze unsigned char to troche malo na liczby :D Zrob wszystkie wspomniane poprawki i pokaz kalkulator ;)


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 19 lut 2009, o 13:51 
Offline
-#
Avatar użytkownika

Dołączył(a): 24 lis 2007, o 16:03
Posty: 89
Uwzględniłem wasze poprawki i kod teraz wygląda tak:
Kod:
float liczba1, liczba2, wynik;
char dzialanie, blad = 0;
                                                 
printf("podaj liczbe 1: ");
scanf("%f", &liczba1);                           
printf("podaj liczbe 2: ");                       
scanf("%f", &liczba2);                           
printf("podaj dzialanie (* / + -) :");           
scanf("%c", &dzialanie);                         

switch (dzialanie)                               
    {                                             
    case '*':                                     
        wynik = liczba1 * liczba2;               
        break;                                   
    case '/':                                     
        wynik = liczba1 / liczba2;               
        break;                                   
    case '+':                                     
        wynik = liczba1 + liczba2;               
        break;                                   
    case '-':                                     
        wynik = liczba1 - liczba2;               
        break;                                   
    default:
       blad = 1
    }
if (blad == 1)
   printf("Bledne dzialanie!");                       
else
   printf("Wynik: %f ", wynik);
Jeszcze coś źle?


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 19 lut 2009, o 14:00 
Offline
-#
Avatar użytkownika

Dołączył(a): 2 sty 2009, o 14:38
Posty: 153
Brak ochrony przed dzieleniem przez zero :D


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 19 lut 2009, o 18:28 
Offline
-#
Avatar użytkownika

Dołączył(a): 16 lis 2007, o 12:08
Posty: 736
Lokalizacja: Lucan
Duże to jest. Taki program to powinno być pare linii.

_________________
Sprawdź czy ktoś już nie zadał Twojego pytania.
Jeżeli pytasz, podaj jak najwięcej informacji.

Systemy dedykowane
Mini powłoka systemów dedykowanych


Obrazek


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 21 lut 2009, o 16:13 
Offline
-#
Avatar użytkownika

Dołączył(a): 19 lut 2009, o 02:11
Posty: 13
Powinno być w pętli tak żeby program po wykonaniu dalej się wykonywał. Chyba, że użytkownik zadecyduje inaczej (jakiś specjalny przycisk do zamknięcia).


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 24 lut 2009, o 02:25 
Offline
-#
Avatar użytkownika

Dołączył(a): 4 lut 2009, o 18:56
Posty: 64
Jak zrobisz to umieść źródło i exe czy też out ;) zobaczymy jak to śmiga na różnych OSach ;)


Góra
 Zobacz profil Wyślij e-mail  
 
 Tytuł:
PostNapisane: 24 lut 2009, o 12:17 
Offline
-#
Avatar użytkownika

Dołączył(a): 24 lis 2007, o 16:03
Posty: 89
Więc w chwili obecnej kod wygląda tak:
Kod:
void powitaj(char *nazwa)
{
   printf("Kalkulator by %s", nazwa);
}

void zegnaj(char *nazwa)
{
   printf("Do zobaczenia %s", nazwa);
}


main()
{
   char exit = 0;dzialanie, nazwa[]="Twoj nick";
   float wynik, liczba1, liczba2;


   while (1)
   {
      powitaj(nazwa);
      printf("Podaj liczbe: ");
      scanf("%f", &liczba1);
      printf("Podaj dzialanie ( * / - + ) :);
      scanf("%c", &dzialanie);
      printf("Podaj liczbe: ");
      scanf("%f", &liczba2);
       
      switch(dzialanie)
      {
         case '-':
            wynik = liczba1 - liczba2;
            break;
            
         case '+':
            wynik = liczba1 + liczba2;
            break;
            
         case '*':
            wynik = liczba1 * liczba2;
            break;
            
         case '/':
            if (liczba2 == 0)
               {
               exit = 1;
               }
            else
               {
               wynik = liczba1 / liczba2;
               }
            break;
            
         default:
            exit = 1;
            break;
      }
      if (exit == 1)
         {
         printf("Niepoprawne dzialanie");
         }
      else
         {
         printf("Wynki %f", wynik);
         }
      printf("Nacisnij: 1-licz ponownie,  2-zakoncz");
      scanf("%c", &dzialanie);
      if (dzialanie == '2')
         {
         zegnaj(nazwa);
         break;
         }
   }
}
Chyba już wystarczy tych szlifów? Jaki można napisać teraz program, żęby się bardziej wkręcić w tematykę?


Góra
 Zobacz profil Wyślij e-mail  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Odpowiedz w wątku

Drukuj

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Teraz jest 2 wrz 2010, o 18:29


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
DS3style by Forum komputerowe PCstrefa.com
Reklama: