Przekonwertowanie Real na String

0

Witam,
szukałem i czytałem na prawdę wiele, ale nie mogę nic znaleźć co mi by pomogło.

Uproszczę sytuacje jedynie do problemu:

s,c,t:Real48

t:=s/c;
writeln ('Wynik to t=', t:7:7);

lecz c musi być różne od 0 zatem chce dodać warunek

if c=0 then
   t:='Nieokr.'
else
   t:=s/c;
writeln ('Wynik to t=', t:7:7);

Pisze jedynie co bym chciał uzyskać, wiem, że to co napisałem jest niepoprawne.
Nieważne jak, czy trzeba utworzyć nowe zmienne, po prostu jeśli c=0 chce uzyskać na wyjściu napis.
Bardzo proszę o pomoc i z góry dziękuję.

0

Ehm...

if c=0 then
  writeln('Nie można obliczyć.')
else
 writeln ('Wynik to t=', (s/c):7:7);
0

Heh, tak jak pisałem, umieszczam tylko sam problem, dlatego mogło by tu tak banalnie wyglądać, ale nie o to chodzi, rzecz jest dużo bardziej złożona, wartości liczone z funkcji itd. Chce zrobić konkretnie to co napisałem, żeby zmiennej typu Real48 przypisać łańcuch.
Fragment który napisałem miał tylko obrazować problem.

0

Dla Delphi
StrToFloat
floattostr
reprezentantem float jest również real48

lub funkcja dla pascala pisana coś około 1994 roku :-)

 function doubletostr(r : double) : string; {-------------zamiana liczb na text---}
var
 a,il : shortint;
 s1:string[12];
begin {------------------------------------------funkcji-------------}
  str(r:6:3,s1);
  a:=1;
  il:=0;
  repeat
    if (s1[a]='0') {or (s1[a]='.')} then il:=il+1;
    a:=a+1;
  until (s1[a-1]='.') or (length(s1)=a-1);
  delete(s1,a-1,1000);
  doubletostr:=s1;
end; {---------------------------------------------funkcji-----------}
0

Dziękuję za zainteresowanie.
próbowałem na wiele sposobów, ale jak dam na przykład

a:Real48;

a:=StrToFloat('s');

to przy kompilacji, gdy dochodzi to tej linijki, wywala błąd "Project T.exe raised exeption class EConvertError with message "s' is not a valid floating point value'. Process stopped. Use Step or Run continue"

0
a := StrToFloat('s');

I ma rację, że się wywala, jak chcesz łańcuch z dowolnym napisem zamienić na float? Taki sam efekt dałoby

a := StrToFloat('pies'); 

Czy 'pies' ma jakąś wartość?

Jeżeli nie jesteś pewien, czy wartość do zamiany jest rzeczywiście liczbą używaj StrToFloatDef()

a := StrToFloat('4,4'); //tak zadziała.
a := StrToFloatDef('s', 0); // tak też zadział zwracając 0
0

Ja bym nie kombinował za bardzo z konwersjami i oszczędnością miejsca, bo to będzie nieczytelne. Utwórz rekord z dwoma polami. Jedno logiczne - będzie informować czy jest zero w wyniku. Drugie będzie przechowywać wartość łańcuchową albo nawet rzeczywistą (bo może to drugie rozwiązanie będzie lepsze). W ten sposób w stosownym dla ciebie miejscu będziesz sprawdzać wartość logiczną rekordu i w zależności od niej dokonywać dodatkowych potrzebnych obliczeń na drugim polu rekordu.

0

A utworzenie rekordu i jego obsługa jest mniejszym kombinowaniem niż prosta konwersja?

0

@Mariusz
Czyli zrobienie takiej zmiennej sterującej w rekordzie hm. No ale jednak w tym przypadku to nie pomoże ech.

@madmike
Wiem, że tak być nie może, nie pisałem tego ze zdziwieniem "o! nie działa", ten przykład miał obrazować mój zamiar, dokładnie chce uzyskać coś tego typu:
zmienne: a, b, c typu Real48
warunek: jeżeli b=0, chce by c przyjęło napis "nieokreślona", jeśli nie to
działanie: *a*/b=c
wypisz: Wynikiem jest wartość c

czyli widać, że jak c != 0 to w sekcji wypisz wypisze liczbę, lecz gdy c=0 to w sekcji wypisz zobaczymy napis.

Nie musi być konkretnie przekonwertowanie tej zmiennej, może być inny zwinny i zgrabny sposób...

Nie da się zarezerwować pamięci na początku programu w sekcji VAR bez tworzenia konkretnej zmiennej, a później utworzenie jej i zdefiniowanie typu w ciele programu głównego, czy procedury, znaczy między Begin i End?

0

Liczba typu real nie będzie nigdy zawierała żadnego napisu. Delphi/Pascal jest językiem bardzo silnie typowanym, i jak coś jest liczbą, to jest liczbą, a nie napisem.
To co chcesz osiągnąć, czyli wypisanie tekstu "nieokreślony" oczywiście da się osiągnąć — ale nie w taki sposób, jak sobie założyłeś.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0