ansi c wczytanie liczby zespolonej

mikhail
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 12 maja 2009, o 15:27
Płeć: Mężczyzna

ansi c wczytanie liczby zespolonej

Post autor: mikhail »

Witam!
Mam taki problem. Otóż chcę wczytać liczbę zespoloną wprowadzoną w postaci wykładniczej tj. Aexp([-]jBpi) i zapisać A do jednej tablicy, a B razem z opcjonalnym znakiem do drugiej. Niestety poniższy kod nie działa i nie mam pojęcia gdzie jest błąd. Byłbym bardzo wdzięczy za odpowiedź.

Kod: Zaznacz cały

#include <stdio.h>
#include <ctype.h>   
#include <stdlib.h> 
int sprawdz_zawartosc(char *tablica, int i);
int main()
{
    char pobierz[100];
    char A[100];
    char B[100];
    int stan=1;
    int i=0;
    int j=0;
    
    memset(pobierz, 0, 100);
    memset(A,0,100);
    memset(B, 0, 100);
    gets(pobierz);
    while(stan!=0)
  {  
    switch (sprawdz_zawartosc(pobierz,i))
    {
              case 0: stan=0; break;
              
              case 1:
                   if(stan==1) 
                               A[i]=pobierz[i];
              
                   if(stan==3) /*skladnik B wykladnika*/
                               { 
                                 B[j]=pobierz[i];
                                 j++;
                               } 
                   else if(stan==5)
                        B[j]=1;
             case 2: stan=2; B[0]=pobierz[i]; 
         
             case 3: stan=3; 
             
             case 5: stan=5;

             case 6: stan=6;/*wystepuje e,x,p,(,i,)*/ 
    }
    i++;
  }
    printf("\n%f", atof(A));
    printf("\n%f", atof(B));
    
    
    return 0;
}


int sprawdz_zawartosc(char *tablica, int k)
{
    int zwrot;
    zwrot=-1;
    
    if(isdigit(tablica[k]) || tablica[k]=='.') zwrot=1;
    if(tablica[k]=='e' || tablica[k]=='x' || tablica[k]=='p' || tablica[k]=='(' || tablica[k]=='i'|| tablica[k]==')') zwrot=6;
    if(tablica[k]=='-' || tablica[k]=='+') zwrot=2;
    if(tablica[k]=='j') zwrot=3;
    if(tablica[k]=='j' && tablica[k+1]=='p') zwrot=5;/*jezeli po j jest p to B=1*/
    if(tablica[k]=='\0') zwrot=0;/*koniec tablicy*/    
    return zwrot;
} 
Ostatnio zmieniony 13 maja 2009, o 19:15 przez mikhail, łącznie zmieniany 2 razy.
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

ansi c wczytanie liczby zespolonej

Post autor: matshadow »

Zauważ że zawsze zapisujesz w case 1: stan 3 wartość w B[1], czy to tak ma być? To jedyne co mi się nasuwa na myśl.
mikhail
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 12 maja 2009, o 15:27
Płeć: Mężczyzna

ansi c wczytanie liczby zespolonej

Post autor: mikhail »

Po usunięciu tego też nie działa. Kompiluje się bez błędów, ale po uruchomieniu i wpisaniu liczby wyskakuje błąd i program przestaje działać.
matshadow
Użytkownik
Użytkownik
Posty: 941
Rejestracja: 17 gru 2007, o 21:48
Płeć: Mężczyzna
Lokalizacja: Kingdom Hearts
Podziękował: 6 razy
Pomógł: 222 razy

ansi c wczytanie liczby zespolonej

Post autor: matshadow »

to znaczy że program wchodzi w nie swoją pamięć Popatrz, czy aby na pewno dobre są zakresy, bo to najczęstszy powód
mikhail
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 12 maja 2009, o 15:27
Płeć: Mężczyzna

ansi c wczytanie liczby zespolonej

Post autor: mikhail »

Błąd był w funkcji sprawdź_zawartość. Teraz działa, ale wczytuje tylko całkowite części np z 3.45exp(-j5.67pi) wczyta 3.0000 i 7.0000.
ODPOWIEDZ