Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » C for schleife multiplikation » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen C for schleife multiplikation
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
0664jester
Jungspund


Dabei seit: 22.03.2014
Beiträge: 18

C for schleife multiplikation Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

hallo,

ich versuche hier eine additon zu schreiben:

Ich moechte eine multiplikation per hand durch fuehren.

123*456


dazu muss ich 6 mit 123, 5 mit 123 und 4 mit 123 mulitplitzieren und dann
die ergebnisse zwischenspeichern, die ich dann shiften muss und addieren.

int b2 = b / 100;
int b1 = (b % 100)/10;
int b0 = b % 10;


for (int i=0; i<3, i++)


wie kann ich das in eine schleife packen, sodass b0, b1, b2 mit a jeweils multiplitziert wird.
mein problem liegt daran, dass ich jetzt nicht weiss, wie wie am besten auf b0 b1 b2 zugreifen soll?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von 0664jester: 25.03.2014 20:55.

25.03.2014 20:54 0664jester ist offline Beiträge von 0664jester suchen Nehmen Sie 0664jester in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo 0644jester,

entschuldige bitte die fehlende Hilfe zur Selbsthilfe. Ich hoffe ich habe dein Anliegen richtig verstanden:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv){
	int a = 123;
	int b = 456;
	int result = 0;

	while(a!=0){
		result += b * (a % 10);
		b*=10;
		a/=10;
	}
	
	printf("%d\n", result);

	return 0;
}


Solltest Du Fragen dazu haben, gib bitte Bescheid.

VG,

Karlito
25.03.2014 21:41 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

Karlito hat natürlich Recht, dass man die einzelnen Ziffern ja nicht unbedingt in Variablen zwischenspeichern muss, sondern auch gleich die errechneten verwenden kann.

Allgemein bietet sich aber immer ein Array an, wenn man auf mehrere Variablen auf gleiche Art und Weise zugreifen will. Z. B. das hier:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
#include "stdio.h"

int main() {
        int a = 123;
        int b = 456;

        int b_digits[12];

        int b_high = b;

        int i;

        for(i = 0; i < (sizeof(b_digits)/sizeof(b_digits[0])); i++) {
                b_digits[i] = b_high % 10;
                b_high /= 10;
        }

        for(i = 0; i < (sizeof(b_digits)/sizeof(b_digits[0])); i++) {
                printf("b_digits[%2d] = %d\n", i, b_digits[i]);
        }
        return 0;
}


Hat diese Ausgabe:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
b_digits[ 0] = 6
b_digits[ 1] = 5
b_digits[ 2] = 4
b_digits[ 3] = 0
b_digits[ 4] = 0
b_digits[ 5] = 0
b_digits[ 6] = 0
b_digits[ 7] = 0
b_digits[ 8] = 0
b_digits[ 9] = 0
b_digits[10] = 0
b_digits[11] = 0


Gruß
Marco

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von as_string: 25.03.2014 21:59.

25.03.2014 21:45 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
0664jester
Jungspund


Dabei seit: 22.03.2014
Beiträge: 18

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

hi,

danke für die Antworten,
mir wurde gestern mitgeteilt dass ich nur additionen und subtraktionen verwenden darf...

bei 3 stelligen Zahlen gibt es eine Schleife, welche 3 mal durchlaufen ist.
* Bei jedem Schleifedurchlauf wird ein Partialprodukt ermittelt und zum Produkt addiert.
* Fuer jedes Partialprodukt braucht man den wert von a, welcher Stelle fuer Stelle
* nach links verschoben wird.
* Und man muss in jedem Schleifendurchlauf das niederwertigste Bit von b betrachten und sodann b um eine
* eine Stelle nach rechts verschieben.



lg
28.03.2014 08:03 0664jester ist offline Beiträge von 0664jester suchen Nehmen Sie 0664jester in Ihre Freundesliste auf
0664jester
Jungspund


Dabei seit: 22.03.2014
Beiträge: 18

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

wie spalte ich a*b mod c am besten auf?
28.03.2014 08:05 0664jester ist offline Beiträge von 0664jester suchen Nehmen Sie 0664jester in Ihre Freundesliste auf
as_string as_string ist männlich
Haudegen


Dabei seit: 06.11.2013
Beiträge: 638
Herkunft: Heidelberg

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

also irgendwie verstehe ich jetzt gar nicht mehr, was Du genau machen willst/musst.
Erst redest Du von drei Stellen, über die Du iterieren willst. Nach Deinen ersteren Beispielen sollten das wohl Dezimalstellen sein, oder?
Dann redest Du aber von Bit und "Stelle für Stelle nach links verschieben" und so, ohne Multiplikation zu verwenden, was mir alles danach klingt, als ob es im Binär-System gemacht werden soll.

Kannst Du nicht mal die Aufgabenstellung wörtlich hier rein stellen, damit wir wissen, was genau überhaupt Sache ist...

Gruß
Marco
28.03.2014 11:04 as_string ist offline E-Mail an as_string senden Beiträge von as_string suchen Nehmen Sie as_string in Ihre Freundesliste auf
Karlito Karlito ist männlich
Kaiser


Dabei seit: 11.04.2011
Beiträge: 1.461

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Hallo,

im Kontext mit den anderen Fragen geht es denke ich um Probleme aus der theoretischen Informatik. So zum Beispiel um das Abschätzen der Laufzeit von Multiiplikation von großen Zahlen (Komplexitätsklasse).

Ich bewege mich auf sehr dünnem Eis wenn ich mich jetzt weiter dazu äußere, da mit momentan die Zeit fehlt mich damit wieder auseinanderzusetzen... Nach Montag wird das dann wieder besser und ich werde versuchen mir auch die anderen Fragen anzuschauen.

@Jester: bitte dazu noch mal die Fragen so stellen, dass sie leicht lesbar, eindeutig und vollständig spezifiziert sind. Das erhöht auch allgemein die Wahrscheinlichkeit, dass geantwortet wird. In einer Frage wurden Sonderzeichen verwendet, welche nicht dargestellt werden können. Dazu bitte LaTeX verwerden. Es gibt eine entsprechende Umgebung dafür. Das kannst du sehen, wenn Du mal einen Artikel zitierst. Auch wikipedia verwendet LaTeX in fast gleicher form (siehe hier)

Jedenfalls gilt es die Multiuplikation einfach als eine endliche Reihe von Additionen darzustellen, was es am Ende ja auch nur ist... Also eine Multiplikation ist abstrakt gesehen nichts weiter als die Kurzschreibweise für eine Reihe von Additionen.

Bsp.:
[latex]<br />
4*5 & = & 5+5+5+5<br />
7*12 & = & 12+12+12+12+12+12+12<br />
[/latex]

usw...

Damit wird eigentlich auch schon klar, was gemacht werden muss. Das Ergebnis ist am Anfang 0 und wird dann a mal um b erhöht.... Ich habe mal mein Programm entsprechend modifiziert:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv){
	int a = 123;
	int b = 456;
	int result = 0;

	while(a--){
		result += b;
	}
	
	printf("%d\n", result);

	return 0;
}


Verwendet werden hier eben nur besagte Addition und Subtraktion. Eine Schleife ist notwendig, da entschieden werden muss, wann die Multiplikation vollständig ist.

VG,

Karlito
28.03.2014 12:18 Karlito ist offline E-Mail an Karlito senden Beiträge von Karlito suchen Nehmen Sie Karlito in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Praktische Informatik » Softwaretechnik » C for schleife multiplikation