C# :: Aufgabe #11
25 Lösungen

Multiplikation ohne zu multiplizieren
Anfänger - C#
von Gustl
- 11.11.2012 um 17:24 Uhr
Erstellen Sie ein Konsolenprogramm welches dem Benutzer auffordert 2 Zahlen einzugeben, diese sollen dann multipliziert werden, jedoch ist nur die Grundrechenart Addition erlaubt.
Wenn einer der 2 Zahlen keine Zahl ist, soll eine Fehlermeldung ausgegeben werden und der Benutzer noch einmal aufgefordert werden eine Zahl einzugeben.
Wenn einer der 2 Zahlen keine Zahl ist, soll eine Fehlermeldung ausgegeben werden und der Benutzer noch einmal aufgefordert werden eine Zahl einzugeben.
Lösungen:
Da es in der Angabe nicht genau angegeben ist, bin ich davon ausgegangen, dass mit Zahlen Ganzzahlen gemeint sind.
Für Gleitkommazahlen würde meine Funktion ähnlich aussehen, allerdings würde dafür die Rechenart Division benützt werden müssen, welche allerdings langsamer als eine Multiplikation wäre.
Hier meine Lösung:
C#-Code
Für Gleitkommazahlen würde meine Funktion ähnlich aussehen, allerdings würde dafür die Rechenart Division benützt werden müssen, welche allerdings langsamer als eine Multiplikation wäre.
Hier meine Lösung:

using System; namespace UE11 { class Program { static void Main(string[] args) { const string ErrorMsg = "Fehler: Keine Zahl, erneut eingeben: "; Console.Write("Erste Zahl eingeben: "); int num1; //Solange einlesen, bis es eine Ganzzahl ist. while (!int.TryParse(Console.ReadLine(), out num1)) { Console.Write(ErrorMsg); } Console.Write("Zweite Zahl eingeben: "); int num2; while (!int.TryParse(Console.ReadLine(), out num2)) { Console.Write(ErrorMsg); } int product = Multiplicate(num1, num2); Console.WriteLine("Das Produkt aus {0}x{1} ist: {2}", num1, num2, product); Console.ReadKey(); } /// <summary> /// Multipliziert die beiden übergebenen Ganzzahlen durch Aufsummieren /// </summary> /// <param name="num1">1. Zahl</param> /// <param name="num2">2. Zahl</param> /// <returns>Produkt der übergebenen Zahlen</returns> private static int Multiplicate(int num1, int num2) { int product = 0; //Vertauschen der Zahlen um Schleifendurchläufe kleinstmöglich zu halten. if (num1 < num2) Swap(ref num1, ref num2); for (int i = 0; i < num2; i++) product += num1; return product; } /// <summary> /// Vertauscht die beiden Werte der Variablen /// </summary> /// <param name="num1">1. Wert</param> /// <param name="num2">2. Wert</param> private static void Swap(ref int num1, ref int num2) { int temp = num2; num2 = num1; num1 = temp; } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace addition { class Program { static void Main(string[] args) { int zahl1; int zahl2; Console.Write("1. Zahl: "); while (true) { try { zahl1 = Convert.ToInt32(Console.ReadLine()); break; } catch { Console.Write("Eingabe war keine Zahl\n1. Zahl: "); } } Console.Write("2. Zahl: "); while (true) { try { zahl2 = Convert.ToInt32(Console.ReadLine()); break; } catch { Console.Write("Eingabe war keine Zahl\n2. Zahl: "); } } int tmp = 0; for (int i = 0; i < zahl2; i++) { tmp += zahl1; } Console.Write("\n"+tmp); while (!Console.KeyAvailable) ; } } }

using System; namespace Multiplikation { class Multiplikation { static void Main(string[] args) { int zahl1, zahl2, ergebnis = 0; Console.Write("Geben Sie den ersten Faktor ein: "); zahl1 = Eingabe(Console.ReadLine()); Console.Write("Geben Sie den zweiten Faktor ein: "); zahl2 = Eingabe(Console.ReadLine()); for (int i = 0; i < zahl1; i++) ergebnis += zahl2; Console.Write(zahl1 + " * " + zahl2 + " = " + ergebnis); Console.ReadLine(); } public static int Eingabe(string eingabe) { try { return Convert.ToInt32(eingabe); } catch { Console.Write("Gültigen Wert eingeben: "); return Eingabe(Console.ReadLine()); } } } }

using System; namespace Test { class MainClass { public static void Main (string[] args) { Console.WriteLine ("Geben Sie zwei Zahlen ein"); Int32 erg = 0; Int32 inp_1 = Eingabe (); Int32 inp_2 = Eingabe (); for (int i=0; i<inp_1; i++) { erg+=inp_2; } Console.WriteLine (erg); Console.ReadLine(); } public static int Eingabe () { int input = 0; while (input == 0) { try { input = Convert.ToInt32 (Console.ReadLine ()); } catch { Console.WriteLine ("Die Eingabe muss eine Zahl sein"); } } return input; } } }

/* * Erstellt mit SharpDevelop. * Benutzer: especk * Datum: 27.01.2015 * Zeit: 17:12 * * Sie können diese Vorlage unter Extras > Optionen > Codeerstellung > Standardheader ändern. */ using System; namespace Multiplikation_ohne_zu_multiplizieren { class Program { public static int zahl1; public static int zahl2; public static void Main(string[] args) { Console.WriteLine("geben Sie die erste Zahl ein"); try { zahl1 = int.Parse(Console.ReadLine()); } catch (Exception) { Console.Write("Bitte nur Ziffern eingeben");Environment.Exit(0); } Console.WriteLine("geben Sie die zweite Zahl ein"); try { zahl2 = int.Parse(Console.ReadLine()); } catch (Exception) { Console.Write("Bitte nur Ziffern eingeben");Environment.Exit(0); } Console.WriteLine(""); int ergebnis=0; for (int i = 0; i < zahl2; i++) { ergebnis+=zahl1; } Console.WriteLine("Das ergebnis lautet: {0}", ergebnis); Console.Write("Press any key to continue . . . "); Console.ReadKey(true); } } }

using System; namespace SymTech { class Program { static void Main(string[] args) { int zahl1 = zahleneingabe("Bitte geben sie die erste Zahl ein:"); int zahl2 = zahleneingabe("Bitte geben sie die zweite Zahl ein:"); Console.WriteLine("{0} * {1} = {2:#,#}", zahl1, zahl2, multiplication(zahl1, zahl2)); Console.ReadKey(); } private static int multiplication(int zahl1 , int zahl2) { int result = 0; for (; zahl1 > 0; zahl1--) result += zahl2; return result; } private static int zahleneingabe(String text) { bool isValid = false; int number = 0; while (!isValid) { Console.WriteLine(text); isValid = int.TryParse(Console.ReadLine(), out number); } return number; } } }
Lösung funktioniert auch mit Minuswerten. Jedoch musste ich 2x eine Subtraktion verwenden
C#-Code

int input1, input2; while (!int.TryParse(Console.ReadLine(), out input1)) Console.WriteLine("Falsche Eingabe"); while (!int.TryParse(Console.ReadLine(), out input2)) Console.WriteLine("Falsche Eingabe"); int result = 0; if (input1 < 0 && input2 >= 0) { int temp = input1; input1 = input2; input2 = temp; } if (input1 < 0 && input2 < 0) { input1 -= input1 + input1; input2 -= input2 + input2; } for (int i = 0; i < input1; i++) result += input2; Console.WriteLine("{0} * {1} = {2}", input1, input2, result);

public static int Multiplicate() { while (true) { int Result = 0; Console.Write("Bitte geben Sie die 1. Zahl ein: "); string Num1 = Console.ReadLine(); Console.Write("Bitte geben Sie die 2. Zahl ein: "); string Num2 = Console.ReadLine(); try { for (int i = 0; i < Int32.Parse(Num2); i++) Result += Int32.Parse(Num1); return Result; } catch { Console.WriteLine("\nFehler: Ungültige Werte."); } } }
Hier noch eine Möglichkeit, die auch bei großen Zahlen in absehbarer Zeit ein Ergebnis findet:
C#-Code

using System; namespace trainYourProgrammer { class MainClass { static void Main(string[] args) { Console.Write ("1. Faktor: "); int factor1 = int.Parse (Console.ReadLine ()); Console.Write ("2. Faktor: "); int factor2 = int.Parse (Console.ReadLine ()); Console.WriteLine ("Das Produkt ist " + Multiply (factor1, factor2)); } public static int Multiply(int a, int b) { int result = 0; for (int i = sizeof(int)<<3 - 1; i >= 0; i--) { //Zahl a bitweise durchgehen int bit = (a >> i) & 1; //Bit von a an Stelle i if (bit == 1) { result += b << i; } } return result; } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace MultiOhne { class Program { static void Main(string[] args) { int one, two; Console.WriteLine("Bitte zwei Zahlen zum Multiplizieren eingeben:"); while(!int.TryParse(Console.ReadLine(), out one)) { Console.WriteLine("Bitte Ganzzahl eingeben"); } while(!int.TryParse(Console.ReadLine(), out two)) { Console.WriteLine("Bitte Ganzzahl eingeben"); } Console.WriteLine("{0}", multiple(one,two)); } static int multiple(int firstNumber, int secondNumber) { int all=0; for (int i = 0; i < secondNumber; i++) { all += firstNumber; } return all; } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace NonMulti { class Program { static void Main(string[] args) { Console.WriteLine("Bitte gebe zwei Zahlen ein die Multipliziert werden sollen"); int a; int b; bool c=true; while (c == true) { string x = Console.ReadLine(); if (Int32.TryParse(x, out a)) { int z = a; string y = Console.ReadLine(); if (Int32.TryParse(y, out b)) { for (int i = 0; i < b - 1; i++) { a = a + z; } Console.WriteLine("Das ergebnis ist = " + a); Console.ReadLine(); c = false; } else { Console.WriteLine("Der von dir eingegebene wert ist keine Zahl"); } } else { Console.WriteLine("der Von dir eingegebene wert ist keine Zahl"); } } } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication3 { class Program { public static void Ausgabe(int zahl1, int zahl2){ Console.WriteLine(zahl1 + " * " + zahl2 + " = " + Multiply(zahl1, zahl2) + "\n"); HideYourself(); } public static int Multiply(int zahl1, int zahl2) { int result = 0; for (int i = 0; i < zahl1; i++) { result += zahl2; } return result; } public static void HideYourself(){Console.Write("You Dumbfuck");} static void Main(string[] args) { bool valid = false; int ersteZahl, zweiteZahl; do { Console.Clear(); Console.WriteLine("Geben Sie die erste Zahl ein: "); valid = Int32.TryParse(Console.ReadLine(), out ersteZahl); } while (valid == false); valid = false; do { Console.Clear(); Console.WriteLine("Geben Sie die zweite Zahl ein: "); valid = Int32.TryParse(Console.ReadLine(), out zweiteZahl); } while (valid == false); Console.Clear(); Ausgabe(ersteZahl, zweiteZahl); Console.ReadLine(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace MultiplizierenOhneMultiplikation { class Program { static void Main(string[] args) { // Deklaration der Variablen int zahl1, zahl2, erg = 0; // Definition der Variablen (Inistalisierung) Console.Write("Geben die 1. Zahl ein: "); while (Int32.TryParse(Console.ReadLine(), out zahl1) == false) Console.Write("Fehler! Geben die 1. Zahl ein: "); Console.Write("Geben die 2. Zahl ein: "); while (Int32.TryParse(Console.ReadLine(), out zahl2) == false) Console.Write("Fehler! Geben die 1. Zahl ein: "); for (int i = 0; i < zahl2; i++) erg += zahl1; Console.WriteLine(Convert.ToString(zahl1) + " x " + Convert.ToString(zahl2) + " = " + Convert.ToString(erg)); Console.Read(); } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ZahlenMulti { class Program { static void Main(string[] args) { int zahl1parsed; int zahl2parsed; int erg = 0; do { Console.WriteLine("Bitte 1. Zahl eingeben:"); } while (!Int32.TryParse(Console.ReadLine(), out zahl1parsed)); do { Console.WriteLine("Bitte 2. Zahl eingeben:"); } while (!Int32.TryParse(Console.ReadLine(), out zahl2parsed)); Console.WriteLine("---- Eingabe bestätigt, Berechnung erfolgt ----"); for (int i = 0; i < zahl2parsed; i++ ) { erg += zahl1parsed; } Console.WriteLine("Ergebnis: " + erg); Console.ReadKey(); } } }

class Program { static void Main(string[] args) { Console.WriteLine("---Multiplikator---"); int x = 0; int y = 0; int z = 0; while (x == 0) { try { Console.WriteLine("Geben Sie die erste beliebige Zahl ein die sie Multiplizieren möchten."); x = Convert.ToInt32(Console.ReadLine()); } catch { Console.WriteLine("Bitte Geben Sie eine Zahl ein!"); } } while (y == 0) { try { Console.WriteLine("Geben Sie die zweite beliebige Zahlen ein die sie Multiplizieren möchten."); y = Convert.ToInt32(Console.ReadLine()); } catch { Console.WriteLine("Bitte Geben Sie eine Zahl ein!"); } } for ( int i = 0; i < x; i++) { z = z + y; } Console.WriteLine("Das Ergebnis ist: {0}",z); Console.ReadKey(); } }

static void Main(string[] args) { //Variablen bekanntmachen int a = 0; int n = 0; int sum = 0; //Gucken ob die erste Eingabe ein Int ist Console.WriteLine("Bitte geben sie 2 Integer Zahlen ein, die multipliziert werden sollen"); try { a = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Bitte nur Integer eingeben"); } //Gucken ob die zweite Eingabe ein Int ist try { n = int.Parse(Console.ReadLine()); } catch { Console.WriteLine("Bitte nur Integer eingeben"); } //Rechnung Muliplikation nur mit addieren for (int i = 0; i < n; i++) { sum += a; } //Ergebnis Console.WriteLine(sum.ToString()); Console.ReadLine(); }

using System; namespace multiplication { class Program { static void Main(string[] args) { bool DoAgain = true; do // Bei einem Fehler wiederhole { try { int Loesung = 0; // Variabel für die Lösung // User eingaben erfassen System.Console.WriteLine("Zahl 1:"); int Zahl1 = Convert.ToInt32(System.Console.ReadLine()); System.Console.WriteLine("Zahl 2:"); int Zahl2 = Convert.ToInt32(System.Console.ReadLine()); // Zahl 1 * Zahl 2 for (int i = 0; i < Zahl2; i++) { Loesung += Zahl1; } // Lösung ausgeben System.Console.WriteLine("Die Lösung ist: " + Loesung); DoAgain = false; // Kein Fehler ist aufgetreten } catch { System.Console.WriteLine("Bitte gebe korrekte Zahlen ein!"); } } while (DoAgain); // end Schlaufe falls alles korrekt ist System.Console.ReadKey(); // beenden auf Tastenklick } } }

static void Main(string[] args) { Console.WriteLine("Bitte geben Sie die erste Zahl ein:"); string eingabe = ""; int zahl1 = 0; int zahl2 = 0; int ergebnis = 0; while (String.IsNullOrWhiteSpace(eingabe)) { eingabe = Console.ReadLine(); try { zahl1 = Convert.ToInt32(eingabe); eingabe = ""; break; } catch (Exception e) { Console.WriteLine("Ungültige Eingabe!"); eingabe = ""; } } Console.WriteLine("Bitte geben Sie die zweite Zahl ein:"); while (String.IsNullOrWhiteSpace(eingabe)) { eingabe = Console.ReadLine(); try { zahl2 = Convert.ToInt32(eingabe); eingabe = ""; break; } catch (Exception e) { Console.WriteLine("Ungültige Eingabe!"); eingabe = ""; } } for (int i = 0; i < zahl2; i++) { ergebnis += zahl1; } Console.WriteLine(zahl1 + " x " + zahl2 + " = " + ergebnis); Console.ReadLine(); }

using System; namespace Exercise_11 { public static class Program { private static void Main() { try { Console.WriteLine("Geben Sie eine Zahl ein."); int a = int.Parse(Console.ReadLine()); Console.WriteLine("Geben Sie noch eine Zahl ein."); int b = int.Parse(Console.ReadLine()); int result = 0; for (int i = 0; i < b; i++) { result += a; } Console.WriteLine($"{a} * {b} = {result}"); Console.Read(); } catch (Exception e) { Console.WriteLine(e.Message); throw; } } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace TrainYourProgrammer11 { class Program { static void Main(string[] args) { int Ergebnis = 0; int zahlA; int zahlB; Console.WriteLine("Geben Sie die erste Zahl der Multiplikation ein: "); while (!Int32.TryParse(Console.ReadLine(), out zahlA)) { Console.WriteLine("Bitte geben Sie einen gültigen Integer ein: "); Console.WriteLine("Geben Sie die erste Zahl der Multiplikation ein: "); } Console.WriteLine("Geben Sie die zweite Zahl der Multiplikation ein: "); while (!Int32.TryParse(Console.ReadLine(), out zahlB)) { Console.WriteLine("Bitte geben Sie einen gültigen Integer ein: "); Console.WriteLine("Geben Sie die zweite Zahl der Multiplikation ein: "); } for (int i = 0; i < zahlB; i++) { Ergebnis += zahlA; } Console.WriteLine(Ergebnis + "\nAuf Tastendruck beendet sich das Programm."); Console.ReadLine(); } } }

static void Aufgabe_11() { int ersteZahl = 0, zweiteZahl = 0, summe = 0; Boolean richtigeEingabe = false; Console.WriteLine("Bitte geben Sie zwei Zahlen ein"); while (!richtigeEingabe) { Console.Write("1: "); richtigeEingabe = Int32.TryParse(Console.ReadLine(), out ersteZahl); } richtigeEingabe = false; while (!richtigeEingabe) { Console.Write("2: "); richtigeEingabe = Int32.TryParse(Console.ReadLine(), out zweiteZahl); } for (int i = zweiteZahl; i > 0; i--) { summe += ersteZahl; } Console.WriteLine("Das Ergebnis lautet {0}.", summe); }
Bei den meisten werden keine negative Zahlen multipliziert, denke ich...
C#-Code

using System; namespace Übung11_Multiplizieren_als_Addition { class Program { static void Main(string[] args) { int zahl1, zahl2, zahl3; zahl1 = Abfrage(); zahl2 = Abfrage(); zahl3 = 0; for (int i=0; i < Math.Abs(zahl2); i++) { zahl3 += zahl1; } if (zahl2<0) { zahl3 *= -1; } Console.WriteLine("Das Ergebnis heisst: {0}", zahl3); Console.WriteLine("Programm bitte mit Tastendruck beenden!"); Console.ReadKey(); } static int Abfrage() { bool _schalter = false; string _eingabe; int eingabezahl=0; do { Console.WriteLine("Bitte eine Integerzahl eingeben!"); _eingabe = Console.ReadLine(); try { eingabezahl = Convert.ToInt32(_eingabe); _schalter = true; } catch { Console.WriteLine("Keine Integerzahl!"); } } while (_schalter != true); return eingabezahl; } } }

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Aufgabe11_MultiplikationOhneZuMultiplizieren { class Program { static void Main(string[] args) { bool parseOk = false; int userEingabe; string eingabe; int count = 1; int ersteZahl; int ergebnis = 0; int zwischen = 0; List<int> AlleEingaben = new List<int>(); while (true) { while (true) { if(AlleEingaben.Count >= 2) Console.WriteLine($"Bitte geben Sie eine {count} Zahl ein oder ein NUll fürs Ergebnis"); else Console.WriteLine($"Bitte geben Sie eine {count} Zahl ein"); eingabe = Console.ReadLine(); if (eingabe == "0" && count >= 2) break; else { parseOk = int.TryParse(eingabe, out userEingabe); if (parseOk) { AlleEingaben.Add(userEingabe); count++; } } } Console.Clear(); // wie viele Zahlen sind in der Liste count = AlleEingaben.Count(); ersteZahl = AlleEingaben[0]; if (count == 2) // wenn nur zwei Zahlen multipliziert werden sollen { for (int i = 0; i < ersteZahl; i++) ergebnis += AlleEingaben[1]; } else // wenn mehrere { for (int i = 0; i < count - 1; i++) { if(i < 1) { for (int j = 0; j < ersteZahl; j++) ergebnis += AlleEingaben[i + 1]; } else { zwischen = 0; for (int j = 0; j < ergebnis; j++) zwischen += AlleEingaben[i + 1]; ergebnis = zwischen; } ersteZahl = AlleEingaben[i+1]; } } Console.WriteLine($"Ergebnis ist: {ergebnis}"); Console.ReadKey(); } } } }

static void Main(string[] args) { int firstInput, secondInput; int sum = 0; int counter = 0; Console.WriteLine("Bitte geben Sie Ihre erste Zahl ein:"); firstInput = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Bitte geben Sie Ihre zweite Zahl ein:"); secondInput = Convert.ToInt32(Console.ReadLine()); do { sum += firstInput; counter++; } while (counter < secondInput); Console.WriteLine(sum); Console.ReadKey(); }

static void Main(string[] args) { do { //erste Zahl eingeben lassen Console.Write("Bitte Zahl 1 eingeben: "); int ersteZahl; while (!int.TryParse(Console.ReadLine(), out ersteZahl)) { Console.Write("Fehlerhafte Eingabe, Eingabe wiederholen: "); } //zweite Zahl eingeben lassen Console.Write("Bitte Zahl 2 eingeben: "); int zweiteZahl; while (!int.TryParse(Console.ReadLine(), out zweiteZahl)) { Console.Write("Fehlerhafte Eingabe, Eingabe wiederholen: "); } //Multiplikation ausführen. int ergebnis = 0; try { for (int i = 0; i < Math.Abs(ersteZahl); i++) //ersteZahl muss der absolute Wert ermittelt werden, sonst droht eine Unendlich-Schleife { if (Math.Sign(ersteZahl) != -1) // prüfung auf Vorzeichen, -1 bedeutet die Zahl ist Negativ ergebnis = checked(ergebnis + zweiteZahl); // Überprüfung auf Überlauf else ergebnis = checked(ergebnis - zweiteZahl); } Console.WriteLine("Das Ergebnis der Multiplikation lautet: " + ergebnis); } catch (OverflowException e) { Console.WriteLine("Multiplikation nicht möglich, werte sind zu groß."); } } while (Console.ReadKey().Key != ConsoleKey.Escape);