Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

Kalkulator z pierwiastkowaniem w C

Idź do strony 1, 2  Następny

 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> C i C++
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
Firenzo



Dołączył: 25 Kwi 2009
Posty: 4

PostWysłany: Sob Kwi 25, 2009 10:03 am      Temat postu: Kalkulator z pierwiastkowaniem w C Odpowiedz z cytatem Pisownia

Witam wszystkich serdecznie :)

Mam do zrobienia projekt prostego kalkulatora w języku C. Natknąłem się jednak na problem z wkomponowaniem działania na pierwiastek kwadratowy do kodu.


Ostatnio zmieniony przez Firenzo dnia Sob Kwi 25, 2009 12:44 pm, w całości zmieniany 1 raz
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Filip



Dołączył: 03 Kwi 2009
Posty: 520

PostWysłany: Sob Kwi 25, 2009 11:31 am      Temat postu: Odpowiedz z cytatem Pisownia

1. odpusc sobie GOTO, zrob to na petli.
problem przypuszczam ze lezy w dolaczaniu modulu. zapisz to wszystko w jeden plik i sprobuj wtedy.
PS. sqrt zwraca double a nie float, sprobuj formatowac %d a nie %f

2. http://4programmers.net/C/Biblioteka_standardowa/Cmath
opis biblioteki, w ktorej jest funkcja sqrt
jezeli chcesz pierwiastek dowolnego stopnia to uzyj funkcji pow ktora podnosi liczbe do zadanej potegi i z wlasnosci:

_________________
Filip

i tyle.

Google niech Ci wujem będzie, StackOverflow bratem, a Wikipedia siostrą...
Oto czemu uzywam Ubuntu
Jak pytać? | Jak zgłaszać błędy?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Numer GG
Fuv



Dołączył: 14 Sty 2009
Posty: 119
Skąd: Gdansk PL

PostWysłany: Sob Kwi 25, 2009 11:34 am      Temat postu: Odpowiedz z cytatem Pisownia

Ja bym dał w ten sposób, że wczytujesz najpierw stopień pierwiastka, potem znak pierwiastka i liczbe pod pierwiastkiem. Wtedy można zostawić wczytywanie tak jak jest: liczba znak liczba.

BTW Tylko wtedy musisz dać potęgę podniesioną do ułamka
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Firenzo



Dołączył: 25 Kwi 2009
Posty: 4

PostWysłany: Sob Kwi 25, 2009 11:49 am      Temat postu: Odpowiedz z cytatem Pisownia

Mhmmm rozumiem, tylko w takim razie jak musiałbym zmienić tę formułę pod casem dla pierwiastka? Na podobnej zasadzie jak było dla dodawanie, odejmowania... czy ma tam być jakaś bardziej złożona funkcja?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Fuv



Dołączył: 14 Sty 2009
Posty: 119
Skąd: Gdansk PL

PostWysłany: Sob Kwi 25, 2009 11:57 am      Temat postu: Odpowiedz z cytatem Pisownia

Mi się wydaje, że wszystko jest jasne:

Kod:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>


int main(void)
    {
              float value1;
              float value2;
              char operation;
              
              printf("Witaj w programie kalkulator! Wprowadz porzadane dzialanie: \n");
              START:
              scanf ("%f %c %f", &value1, &operation, &value2);
              
              switch (operation)
              {
                      case 118:
                      case 86:
                   if (value2 < 0)
                   printf ("Liczba podpierwiastkowa jest mniejsza od zera!\n");
                   else
                   printf ("%f\n", pow(value2,(1.0/value1)));
                   break;
                     case '+':
                          printf ("%.2f\n", value1 + value2);
                          break;
                     case '-':
                          printf ("%.2f\n", value1 - value2);
                          break;
                     case '*':
                     case 'x':
                          printf ("%.2f\n", value1 * value2);
                          break;
                     case '/':                    
                     case ':':
                          if (value2 == 0)
                          printf ("Nie dziel cholero przez zero!\n");
                          else
                          printf ("%.2f\n", value1 / value2);
                          break;
                    
                     default:
                          printf ("W kulki lecisz!\n");
                          break;
              }
                  
              printf("\n");
              goto START;
    }



I teraz gdy chcesz pierwiastkować to wpisujesz jak mówiłem:

stopień pierwiastka(value1), znak pierwiastka(operation) i liczbę pod pierwiastkiem(value 2).

No chyba że ma być tylko i wyłącznie pierwiastkowanie drugiego stopnia, ale to inna bajka...
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
izaw



Dołączył: 12 Wrz 2008
Posty: 2136
Skąd: Łódź

PostWysłany: Sob Kwi 25, 2009 12:09 pm      Temat postu: Odpowiedz z cytatem Pisownia

Fuv napisał
Kod:
  case 118:
  case 86:

Po co magiczne liczby? Nie prościej i lepiej
Kod:
  case 'v':
  case 'V':
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Firenzo



Dołączył: 25 Kwi 2009
Posty: 4

PostWysłany: Sob Kwi 25, 2009 12:10 pm      Temat postu: Odpowiedz z cytatem Pisownia

Ahhh na takiej zasadzie.aa Bardzo dziękuję!
A co oznaczają case 118 i case 86? Skąd one się wzięły? Jestem początkujący i z wieloma sprawami nie miałem jeszcze styczności ;)

edit: Właśnie tego mi brakowało :D
A jeśli chodzi o pętlę, to jaki warunek powinien być przy while'u? Bo tak w sumie to nic konkretnego nie musi być spełnione. Po prostu ma się pojawić wynik i wtedy przeskakujemy na start. Co proponujecie?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
izaw



Dołączył: 12 Wrz 2008
Posty: 2136
Skąd: Łódź

PostWysłany: Sob Kwi 25, 2009 12:56 pm      Temat postu: Odpowiedz z cytatem Pisownia

Poszukaj sobie o pętlach nieskończonych.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Fuv



Dołączył: 14 Sty 2009
Posty: 119
Skąd: Gdansk PL

PostWysłany: Sob Kwi 25, 2009 1:09 pm      Temat postu: Odpowiedz z cytatem Pisownia

1 http://pl.wikipedia.org/wiki/ASCII

Możesz zastąpić to: 'v' oraz 'V', ale ja wole w ASCII

2. Pętle nieskończone(przykład): while(1) { } i tyle
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość Odwiedź stronę autora Numer GG
Firenzo



Dołączył: 25 Kwi 2009
Posty: 4

PostWysłany: Sob Kwi 25, 2009 1:41 pm      Temat postu: Odpowiedz z cytatem Pisownia

Wykombinowałem taką pętlę, ale po wykonaniu pierwszego działania program się wiesza. Widzicie jakiś błąd?

Kod:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>


int main(void)
    {
              float value1;
              float value2;
              char operation;
              char x;
              
              printf("Witaj w programie kalkulator!\nMozesz obliczyc sume, roznice, iloczyn, iloraz oraz kwadrat i pierwiastek\ndowolnego stopnia calkowitego.\nWprowadz porzadane dzialanie: \n");
              do
              {
              scanf ("%f %c %f", &value1, &operation, &value2);
              
              switch (operation)
              {
                     case '+':
                          printf ("%.2f\n", value1 + value2);
                          break;
                     case '-':
                          printf ("%.2f\n", value1 - value2);
                          break;
                     case '*':
                     case 'x':
                          printf ("%.2f\n", value1 * value2);
                          break;
                     case '/':                    
                     case ':':
                          if (value2 == 0)
                          printf ("Nie dziel cholero przez zero!\n");
                          else
                          printf ("%.2f\n", value1 / value2);
                          break;
                     case '^':
                          printf ("%f\n", pow(value1,(value2)));
                          break;
                     case 'v':
                     case 'V':
                          if (value2 < 0)
                          printf ("Liczba podpierwiastkowa jest mniejsza od zera!\n");
                          else
                          printf ("%f\n", pow(value2,(1.0/value1)));
                          break;
                     default:
                          printf ("W kulki lecisz!\n");
                          break;
              }
                  
              printf ("\n");
              printf ("Kontynuowac? (T,N)\n");
              scanf ("%c", x);

              }
              while (x!='N' && x!='n');
              
                        
    }
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> C i C++ Wszystkie czasy w strefie CET (Europa)
Idź do strony 1, 2  Następny
Strona 1 z 2

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.03140 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | VB4all | Tansze zakupy w Helionie | MS Office Blog |