Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 6 odgovora
  • 3.041 pregleda

Najnovija ↓

Problem sa stringom 08.04.2011. u 00:27 · pre 189 meseci #1
Izdvajanje realnog i imaginarnog dijela iz kompleksnog broja zapisanog kao string
Code:

  public Complex Vracanje_Complex(string s)
        {
            
            double r = Convert.ToDouble(s.Substring(0, s.LastIndexOf(" ")));
            
            int len = s.Length - (s.IndexOf("j") + 1);

            
            double i = Convert.ToDouble(s.Substring(s.IndexOf("j") + 1, len));

            return new Complex(r, i);
        }

problem je kad je imaginarni dio negativan(tj. vrati mi pozitivni dio)
Broj je u stringu s zapisan kao s="1.234 -j4.1234" (Ima razmak izmedju zadnje znamenke realnog dijela i operatora)

Kako da mi vrati img=-4.1234 a ne img=4.1234
Re: Problem sa stringom 08.04.2011. u 01:41 · pre 189 meseci #2
Zašto ne pročitaš šta se nalazi ispred "j" ? Znači to bi bilo nešto ovako:
Code (csharp):

public Complex Vracanje_Complex(string s)
{
     double r = Convert.ToDouble(s.Substring(0,
     s.LastIndexOf(" ")));
     int len = s.Length - (s.IndexOf("j") + 1);
     double i = Convert.ToDouble(s.Substring(s.IndexOf("j") + 1, len));

     //provera da li je broj negativan
     if(s.Substring(s.IndexOf("j")-1,1)=="-")
          i = -i;

     return new Complex(r, i);
}
 

Ovo bi trebalo da ti radi posao, mada samo kada je kompleksan broj zadat u
strogo određenom formatu. Da bi se lepo parsirao string i kada su zapisani
drugačije, ili sa više razmaka (recimo prvo imaginaran deo, pa onda
realan), trebao bi da probaš da promeniš algoritam.

Evo jedne ideje: ako je uvek ovaj format stringa kao u primeru koji si
dao, zašto ne bi uzeo od celog stringa s="1.234 -j4.1234" ovaj deo:
"-j4.1234", i zatim izbaciš "j" i ostaje ti "-4.1234" i to onda proslediš
za konvertovanje u double. Tada nećeš imati problema sa znakom.
Usput, ne moraš koristiti Convert.ToDouble(string), imaš u klasi double
metodu Parse (double.Parse(string)).


--
Using Opera's revolutionary email client: http://www.opera.com/mail/
Re: Problem sa stringom 08.04.2011. u 09:06 · pre 189 meseci #3
Hvala,da radi odlicno,string je vazda u tom formatu.
I sad pitanje,Zasto bi koristio double.Parse umjesto Convert.todouble??Brze se izvrsava ili sta vec??
Re: Problem sa stringom 08.04.2011. u 11:05 · pre 189 meseci #4
Ne znam da se brže izvršava. double.Parse je osnovnija metoda za
konverziju stringa u double, moguće je da Convert.ToDouble kad se izvršava
ustvari poziva double.Parse pa vraća rezultat koji dobije, i ako je tako,
onda je double.Parse brža jer ima jedan poziv f-je manje. Ali to kod
današnjih računara ne pravi razliku. Spomenuo sam ti čisto informativno.
Koristi je ako je nađeš zgodnom, ako ne, i ovako je ok.
--
Using Opera's revolutionary email client: http://www.opera.com/mail/
Re: Problem sa stringom 08.04.2011. u 12:00 · pre 189 meseci #5
Citat:

Ne znam da se brže izvršava. double.Parse je osnovnija metoda za
konverziju stringa u double, moguće je da Convert.ToDouble kad se izvršava
ustvari poziva double
.Parse pa vraća rezultat koji dobije, i ako je tako,
onda je double.Parse brža jer ima jedan poziv f-je manje. Ali to kod
današnjih računara ne pravi razliku. Spomenuo sam ti čisto informativno.
Koristi je ako je nađeš zgodnom, ako ne, i ovako je ok.


crveni text ti netreba ;)
Bolje je koristiti Decimal.Parse ili bilo koji drugi tip podatka.Parse od Convert.To...
Potpis
there's no place like 127.0.0.1
Re: Problem sa stringom 08.04.2011. u 12:22 · pre 189 meseci #6
Razlika je u tome sto Convert.ToDouble vraca nulu ako je string null umesto exception-a:
Code (csharp):

public static double ToDouble(string value)
{
    if (value == null)
        return 0.0;
    return double.Parse(value, CultureInfo.CurrentCulture);
}
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: Problem sa stringom 08.04.2011. u 12:58 · pre 189 meseci #7
A i taj expception može da se izbegne sa tipPodatka.TryParse, umesto tipPodatka.Parse .
Pritom, odmah se i hvata rezultat TryParse-a, tj. da li je uspelo ili ne, pa sam odlučuješ da li ćeš da postaviš neku defaultnu vrednost (0.0, recimo) ili da na zaustaviš program, itd..
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme