Schrift
[thread]1086[/thread]

Dezimalzahl in Dualzahl umwandeln (Seite 4)

Leser: 1


<< |< 1 2 3 4 >| >> 38 Einträge, 4 Seiten
Crian
 2003-09-11 23:04
#11045 #11045
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
1) sizeof (char) ist unter C immer 1 (unter C++ kann das anders sein, aber da sollte man eh kein malloc verwenden)

2) malloc (und calloc) sollte man keinen Cast verpassen, da das unnötigerweise ev. berechtigte Warnungen ausschaltet (aber zu diesem Thema gab es schon immer sehr kontroverse Diskussionen in den entsprechenden Newsgroups)\n\n

<!--EDIT|Crian|1063307214-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2003-09-12 00:32
#11046 #11046
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ok....
sizeof(char) == 1 geht an dich!

jedoch mit dem cast liegst du falsch...
calloc und malloc gibt einen void* zurück...
in der doku steht:

calloc returns a pointer to the allocated space. The storage space pointed to by the return value is guaranteed to be suitably aligned for storage of any type of object. To get a pointer to a type other than void, use a type cast on the return value.
kabel
 2003-09-12 10:19
#11047 #11047
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
OOOPS :p thx, das hatte ich komplett übersehen.
es gab aber keinen segfault... hehe, gute alte C zeiten 8)

und wie sieht es mit mulitbyte-codes aus?
-- stefan
SirLant
 2003-09-12 16:20
#11048 #11048
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Ich vertseh nur noch bahnhof von dem was ihr da gerade redet :(

Aber bis in ein paar Wochen, wenn meine ersten progrämmenchen
laufen, dann werd ich da vllt. auch schon ein wenig mitreden
können :)

Mal ne andere Frage:
Ich will mein Lernprogramm das ich einst in Perl schrieb auf
C portieren, wie sollte ich da das einlesen der der Dateien
mit den Fragen+Antworten bewerkstelligen?
Wenn ich immer die ganze Datei einlese kann eigentlich nicht
viel passieren, da niemand ne 20MB Textdatei auswählen wird.

Sollte ich da die größe Ermitteln und ne Beschränkung einbauen(max 5MB?)
und dann mit Malloc mir Speicher in der größe allokieren?

Gebt mir mal bitte ein paar Tipps, geht mir hier nur um das
Einlesen.

Und wie sieht es mit einem Trennzeichen aus?In meinem
derzeitigen werden Fragen+Antworten durch //// getrennt
und Pro Frage+Antwort eine Zeile verwendet.
Kann ich dieses System beibehalten und wie müsste ich dann
die Daten einlesen (ne For-Schleife durch ein Array liefert ja
immer nur 1zeichen, da bräuchte //// 4Durchläufe um es zu erkennen)
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
SirLant
 2003-09-15 18:02
#11049 #11049
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Ich bräuchte nun doch eine bessere Methode als meine, da
wir heute in der Schule das Dualsystem lernte, nun möchte
ich meine Rechnungen selbstverständlich überprüfen können.
Man könnte zwar auch einfach den Taschenrechner nehmen,
aber wozu kann man schließlich programmieren :laugh:

Ist die Funktion von kabel so wie sie in #2 steht, denn
richtig?
Da ihr ja darüber einige zeit diskutiert habt.


Und wie müsste eine Funktion die Binär in Dezimal
umwandelt aussehen?
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
kabel
 2003-09-16 01:21
#11050 #11050
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
der einzige schönheitsfehler ist, dass die funktionen mit 8 bit zahlen hantieren. eine erweiterung ist aber leicht möglich. die diskussion war 1) durch meine eingerosteten C kenntnisse und 2) durch einige begriffe bestimmt, deren bedeutungen bzw. die abgrenzung derer anscheinend mit der zeit verschwommen sind.

dual -> dezimal:

1100 = 1*2^3 + 1*2^2 + 0*2^1 + 0*2^0 = (((1*2 + 1)*2) + 0)*2 + 0 = 12 (horner-schema)

Quote
C:\tmp>type test.pl
sub horner_scheme {
       my ($zahl) = @_;
       my ($head, @tail) = split //, $zahl;
       $head = "($head*2 + $_)" foreach @tail;
       $head;
}

my $delayed_expr = horner_scheme ($ARGV[0] || "1100");
print $delayed_expr, " evalutes to ", eval $delayed_expr;
C:\tmp>perl -w test.pl
(((1*2 + 1)*2 + 0)*2 + 0) evalutes to 12
C:\tmp>


die funktion wandelt eine binärzahl in die string-darstellung des hornerschen schemas um, die dann nur noch evaluiert werden muss.

die altmodische variante ;)
Quote
C:\tmp>type test.pl
$zahl += $_*2**$pot++ foreach split //, reverse $ARGV[0] || "1100"; print $zahl;
C:\tmp>perl test.pl
12
C:\tmp>
-- stefan
SirLant
 2003-09-16 16:17
#11051 #11051
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Danke ich werde mich heute Nachmittag einmal daran setzen
muss so ein Programm schreiben das Binär->Dezimal kann
und Dezimal->Binär mit Rechenweg (also das teilen bzw. die
Potenzen)

Werde daher auch die einfachste variante nehmen mit dem
Potenzieren.

Aber wie kann ich z.B. bei der Zahl (werde float verwenden)
123684 auf die einzelnen Ziffern zugreifen?Sie Also wie in einem
Zeichenkettenarray Ziffer für Ziffer durchzugehen?\n\n

<!--EDIT|SirLant|1063714872-->
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
SirLant
 2003-09-16 18:23
#11052 #11052
User since
2003-08-04
516 Artikel
BenutzerIn
[default_avatar]
Bin inzwischen soweit, dass ich weiß, dass man dafür besser
keine float-Variablen verwendet.
Nun stellt sich mir die Frage was ich alternativ verwenden soll?
--Programming today is a race between Software Enginers striving to build bigger and better idiot-proof Programs,
and the Universe trying to produce bigger and better idiots.
So far, the Universe is winning!
<< |< 1 2 3 4 >| >> 38 Einträge, 4 Seiten



View all threads created 2003-09-08 18:55.