WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Mulitplikation/Division eines Arrays zeichenweise (http://www.wcm.at/forum/showthread.php?t=75442)

pong 31.10.2002 12:49

Mulitplikation/Division eines Arrays zeichenweise
 
habe 2 char arrays mit N zeichen und möchte diese jetzt zeichenweise dividieren und multiplizieren, allerdings hab ich nicht den schimmer einer ahnung wie ich das anstell

sprich ich bräuchte eine schritt für schritt anleitung
in pseudocode wärs ned schlecht ;)

pong

creibl 31.10.2002 12:56

Welche Sprache?? Java, C++, C#, etc etc etc.

Hellsehen kann keiner!

pong 31.10.2002 14:06

Zitat:

Hellsehen kann keiner!
aus diesem grund steht aus pseudo code darunter, mir gehts ja nur um den ablauf

Tarjan 31.10.2002 14:32

char multiplizieren und dividieren wird nicht überall gehen, da dies zeichen sind. In Java geht´s weil jeder char ein int analogon hat.

Allgemein:

Code:


array1[]
array2[]
  //Ausgangsarray

ergebniss1[]
ergebniss2[]
  //Ergebnis Array
for (int i = 0; i < arraylänge; i++)
  //Schleife aufbauen
{
  ergebniss1[i] = array[1] * array[2];
  ergebniss2[2] = array[2] * array[2];
}

In Java ist das Ergebnis ein int da von char auf int mit der Rechenoperation automatisch gecastet wird.

pong 31.10.2002 14:49

Zitat:

In Java geht´s weil jeder char ein int analogon hat.
also es geht um c++, und um bei der multiplikation keine wertüberlauf krieg, kann ich ja 0x30 abziehen


ich glaub ich hab mich ein bissl unverständlich ausgedrückt, sorry (aber danke für die antwort tarjan)

in jedem element des arrays steht genau eine ziffer drinnen und es soll auch nicht mehr beinhalten

Tarjan 31.10.2002 17:57

Hmm, ganz vorstellen was du da wirklich machen willst kann ich mir immer noch nicht.

Jedenfalls, wennst zwei Arrays hast, die Schleife so laufen lassen dass du halt jedes Elemnt mal durchläufst. Wenn du das Kreuzprodukt haben willst (als jedes Element des einen Arrays mit jeden Element des anderen verknüpfen) brauchst du eine Doppelschleife.

renew 31.10.2002 19:01

Zitat:

Original geschrieben von Tarjan
Hmm, ganz vorstellen was du da wirklich machen willst kann ich mir immer noch nicht.

Jedenfalls, wennst zwei Arrays hast, die Schleife so laufen lassen dass du halt jedes Elemnt mal durchläufst. Wenn du das Kreuzprodukt haben willst (als jedes Element des einen Arrays mit jeden Element des anderen verknüpfen) brauchst du eine Doppelschleife.

i kanns mir auch noch net vorstellen. Stehen im Array "Zahlen" drin oder irgendwelche ASCII Zeichen?

Schleife siehe posting von Tarjan - je nachdem was du brauchst.

pong 01.11.2002 13:16

2 arrays
jedes stellt eine n lange zahl dar
in jedem element eines arrays steht eine ziffer
diese 2 arrays möchte ich miteinander multiplizieren und dividieren
die ausgabe erfolgt in ein 3tes array

renew 01.11.2002 13:52

Also:
array1[0-2]="123" und array2[0-2]="987"
(array1[0]="1"; array1[1]="2"; ....)

und du willst 123 * 987 und 123 / 987 rechnen - right?

Tarjan 01.11.2002 15:03

Wenn du das als ganze Zahl rechnen willst kommen aber die Überträge noch erschwernde hinzu. Da musst wirklich das händische multiplizieren und dividieren nachbilden.

kikakater 01.11.2002 15:17

Dafür gibt es ja 64bit Prozessoren, damit die Bitnibblerei bald ein Ende hat. FPUs haben auch nur eine begrenzte Anzahl an Ziffern in der Mantisse.

renew 01.11.2002 15:21

Zitat:

Original geschrieben von kikakater
Dafür gibt es ja 64bit Prozessoren, damit die Bitnibblerei bald ein Ende hat. FPUs haben auch nur eine begrenzte Anzahl an Ziffern in der Mantisse.
na das wird ihm helfen.:mad: ;)

Tarjan 01.11.2002 15:23

Zitat:

Original geschrieben von kikakater
Dafür gibt es ja 64bit Prozessoren, damit die Bitnibblerei bald ein Ende hat. FPUs haben auch nur eine begrenzte Anzahl an Ziffern in der Mantisse.
Die Bitnibblerei interessiert mich beim Programmieren in einer höhren Sprache nicht. Und nur um 2 Zahlen zu multiplizeiren brauche ich keinen 64 Bit Prozessor.

kikakater 01.11.2002 15:31

Division:

Wenn er ZWEI superlange Zahlen als ASCII Code char Arrays hat, muß er eben die eine so oft addieren in ein eigenes char Array (mit Übertrag) bis diese entstehende Summe zu groß für den Dividenden (das ist die erste Zahl) wird. Sooft die Zahl2 aufaddiert wurde, ergibt das Ergebnis dieses Teils der Division. Die Differenz aus Zahl1Teil - Ergebnis1Teil * Zahl2 wird der verbleibenden Zahl1 vorangestellt und das gleiche Spiel beginnt von neuem. Ergebnis1Teil wird im Array3 (=Endergebnisarray) gespeichert.

kikakater 01.11.2002 15:34

Rechenschieber Aufgabe, Flattersatz, könnts' nicht mehr dividieren ? :D

renew 01.11.2002 16:21

also ich komm nimma mit

Zitat:

Original geschrieben von kikakater
Rechenschieber Aufgabe, Flattersatz, könnts' nicht mehr dividieren ? :D
na - dafür bin ich zu jung - meine Generation verwendet dafür die neueste Erfindung - die heißt Taschenrechner wenns zu kompliziert wird.

kikakater 01.11.2002 16:31

Der Taschenrechner macht aber ähnliches auf elektronischem Weg ...

Außerdem gibt es auch Vorlesungen wie "Algorithmen und Datenstrukturen" und so weiter, da nützt einem ein Taschenrechner wenig, wenn Verständnis gefragt ist.

renew 01.11.2002 16:40

Zitat:

Original geschrieben von kikakater
Der Taschenrechner macht aber ähnliches auf elektronischem Weg ...

Außerdem gibt es auch Vorlesungen wie "Algorithmen und Datenstrukturen" und so weiter, da nützt einem ein Taschenrechner wenig, wenn Verständnis gefragt ist.

jo - nur so weit bin ich noch nicht. (muss amal die Matura machen)

Und ich glaub nicht, dass die meisten hier ein Informatikstudium hinter sich haben... ;)

kikakater 01.11.2002 16:44

Schon, aber die Volksschule :lol: (dividieren per Hand)

renew 01.11.2002 17:45

Zitat:

Original geschrieben von kikakater
Schon, aber die Volksschule :lol: (dividieren per Hand)
und?

Sicher kann man das, nur fang ich damit beim Programmieren nix an - oder doch? Oder wie oder was.... :verwirrt:

Tarjan 01.11.2002 17:52

Wennst von Hand weg dividieren kannst, dann kannst es auch nachprogrammieren.

Und genau das hat kikater oben beschrieben.

kikakater 01.11.2002 18:08

Du musst von links nach rechts die große Zahl durchackern, die Schreibstellen, die bereits dividiert wurden, kommen weg, bleibt eine kleinere große Zahl über, die - um links die Differenz aus der Teilzahl und dem Vielfachen des Divisors erweitert - weiter dividiert wird. Eben solange bis der Divisor größer ist als der Restdividend oder ein paar Nachkommastellen noch weiter, jedenfalls unter Erweiterung des verbleibenden Dividenden um jeweils eine Zehnerpotenz.

Tarjan 01.11.2002 18:30

Zitat:

Original geschrieben von kikakater
Du musst von links nach rechts die große Zahl durchackern, die Schreibstellen, die bereits dividiert wurden, kommen weg, bleibt eine kleinere große Zahl über, die - um links die Differenz aus der Teilzahl und dem Vielfachen des Divisors erweitert - weiter dividiert wird. Eben solange bis der Divisor größer ist als der Restdividend oder ein paar Nachkommastellen noch weiter, jedenfalls unter Erweiterung des verbleibenden Dividenden um jeweils eine Zehnerpotenz.
eben so wie man's in der Volksschule gelernt hat :D

kikakater 01.11.2002 18:34

Zitat:

Original geschrieben von LLR


und?

Sicher kann man das, nur fang ich damit beim Programmieren nix an - oder doch? Oder wie oder was.... :verwirrt:

:lol:

renew 01.11.2002 20:08

ok habts mich überzeugt.... :)

kikakater 01.11.2002 20:20

So ähnlich funktionierte auch die Softwareemulation der x87 FPU des i386 SX, glaub ich. Der SX Prozessor hatte keine Fließkommaeinheit in der CPU integriert.

pong 12.11.2002 17:23

kann mir bitte jemand das mutliplizieren per hand vieliecht noch mal erklären, bitte

@LLR eigentlihc will ich 89123048120349812093481024821401948120*71289571208 9489238ß141923749812379821749124 nehmen und nicht einfach 3 stellige zahlen ;)

kikakater 12.11.2002 19:14

Wenn ein scharfes s dabei ist, steig ich aus ;)

pong 12.11.2002 20:30

Zitat:

Original geschrieben von kikakater
Wenn ein scharfes s dabei ist, steig ich aus ;)
im krieg, in der liebe und als char ist alles erlaubt :D

kikakater 13.11.2002 00:51

Ich würde sagen, von rechts nach links durchmultiplizieren und die Teilprodukte um ihrer Stelle gerecht verschoben addieren. COBOL in fast Reinkultur :D oder etwa nicht ...

pong 14.11.2002 20:26

Zitat:

COBOL in fast Reinkultur :D oder etwa nicht ...
und für dich geb ich ein occurs aus :D

ps: danke an alle, ich habs jetzt so halbwegs zambracht


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:10 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag