none
for Schleife ohne die Zahl 7.... RRS feed

  • Frage

  • Hi Leute, habe vor kurzem mit C# angefangen, nun eine frage.

    Folgende Aufgabenstellung:

    Zahlen sollen mit 1 beginnend immer weiter hochgezählt werden (1, 2, 3 etc.).
    Dabei sind folgende Zahlen nicht erlaubt:
    - alle Vielfachen von 7
    - Alle Zahlen, welche die Ziffer 7 enthalten (z.B. 27)
    Erstelle ein Konsolenprogramm, das bis zum Erreichen der Zahl 100 alle Zahlen durchzählt und anstelle von Zahlen die nicht erlaubt sind, die Zeichenfolge 'Piep' ausgibt.

    -----------------------------------------------------------------------------------------------------------------------------------------------------------

    Hier nun mein Beispiel Code:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace C__Comcave
    {
        class Program
        {
            static void Main()
            {

                for (int i = 1; i <= 100; i++)
                {

                    if (i == 7 || i == 17 || i == 27 || i == 37 || i == 47 || i == 57 || i == 67 || i > 69 && i < 80 || i == 87 || i == 97)
                    {

                        Console.Beep(400, 200);

                    }

                    else
                    {

                        Console.WriteLine(i);

                    }
                   

                }

                Console.ReadKey();


            }
        }
    }

    ----------------------------------------------------------------------------------------------------------------------------------------------------------#

    Meine Frage ist jetzt, wie könnte ich das ganze mit dem Modulo Operator % lösen, da fehlt mir noch ein bisschen das

    Know-How darüber....

    Ich würde mich auf eine Hilfestellung sehr freuen.

    Liebe Grüße Domi

    Donnerstag, 13. Juni 2019 13:01

Antworten

  • Hi,

    probier's mal hiermit:

    for( int i = 1; i <= 100; i++ ) {
        if( i % 7 == 0 || i.ToString().Contains( "7" ) ) {
            Console.WriteLine( "Beep" );
        } else {
            Console.WriteLine( i.ToString() );
        }
    }


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 13. Juni 2019 13:28
    Moderator
  • Modulo alleine genügt hier nicht, daß du ja auch alle Zahlen ausschliessen willst, die eine 7 enthalten.

    Vielfache von 7 erhälst du mit 

    if(i % 7 == 0)

    und Zahlen, die eine 7 enthalten z.B. dadurch, daß du die Zahl in eine Zeichenkette umwandelst und prüfst, ob diese eine 7 enthält:

    if(i.ToString().Contains("7"))

    Das Ganze lässt sich natürlich auch in einem einzigen if kombinieren (mit || in diesem Fall), sodaß dein Code sehr übersichtlich wird und auch das Beep nur an einer Stelle aufgerufen wird. Da der durchlauf ziemlich fix geht, wird das wohl ein langes (oder kurzes, wie man es nimmt) Beep werden :)


    Donnerstag, 13. Juni 2019 13:28
  • Das ist eine Variante des FizzBuzz-Test, da es dafür viele spannende Lösungen in einer Menge Programmiersprachen gibt hier erst einmal der Link zum Thema "FizzBuzz" - dürfte für den einen oder anderen interessierten Leser auch spannend sein.

    Die Modulo Funktion berechnet den Rest einer Division zweier ganzer Zahlen. Für den geforderten Wert von 7, ist Modulo 7 also für alle Vielfachen von 7 = 0, diesen Fall kannst du natürlich einfach für alle Zahlen 1 - 100 Prüfen, z. B. in deiner Schleife mit

    if(i % 7 == 0)

    Diesen Test müsstest Du, wenn beide Bedingungen mit Modulo Operator geprüft werden sollen, auch auf jede Ziffer der jeweiligen Zahl Anwenden.

    Die geforderte Aufgabe ist auch ohne Modulo lösbar, im vorgenannten Link zu FizzBuzz gibt es Beispiele dazu.


    - Gruß Florian

    Freitag, 14. Juni 2019 15:08

Alle Antworten

  • Hi,

    probier's mal hiermit:

    for( int i = 1; i <= 100; i++ ) {
        if( i % 7 == 0 || i.ToString().Contains( "7" ) ) {
            Console.WriteLine( "Beep" );
        } else {
            Console.WriteLine( i.ToString() );
        }
    }


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Donnerstag, 13. Juni 2019 13:28
    Moderator
  • Modulo alleine genügt hier nicht, daß du ja auch alle Zahlen ausschliessen willst, die eine 7 enthalten.

    Vielfache von 7 erhälst du mit 

    if(i % 7 == 0)

    und Zahlen, die eine 7 enthalten z.B. dadurch, daß du die Zahl in eine Zeichenkette umwandelst und prüfst, ob diese eine 7 enthält:

    if(i.ToString().Contains("7"))

    Das Ganze lässt sich natürlich auch in einem einzigen if kombinieren (mit || in diesem Fall), sodaß dein Code sehr übersichtlich wird und auch das Beep nur an einer Stelle aufgerufen wird. Da der durchlauf ziemlich fix geht, wird das wohl ein langes (oder kurzes, wie man es nimmt) Beep werden :)


    Donnerstag, 13. Juni 2019 13:28
  • Herzlichen Dank Christoph und Stefan, ihr habt mir wirklich sehr weiter geholfen!!

    Liebe Grüße Domi

    Donnerstag, 13. Juni 2019 14:30
  • Das ist eine Variante des FizzBuzz-Test, da es dafür viele spannende Lösungen in einer Menge Programmiersprachen gibt hier erst einmal der Link zum Thema "FizzBuzz" - dürfte für den einen oder anderen interessierten Leser auch spannend sein.

    Die Modulo Funktion berechnet den Rest einer Division zweier ganzer Zahlen. Für den geforderten Wert von 7, ist Modulo 7 also für alle Vielfachen von 7 = 0, diesen Fall kannst du natürlich einfach für alle Zahlen 1 - 100 Prüfen, z. B. in deiner Schleife mit

    if(i % 7 == 0)

    Diesen Test müsstest Du, wenn beide Bedingungen mit Modulo Operator geprüft werden sollen, auch auf jede Ziffer der jeweiligen Zahl Anwenden.

    Die geforderte Aufgabe ist auch ohne Modulo lösbar, im vorgenannten Link zu FizzBuzz gibt es Beispiele dazu.


    - Gruß Florian

    Freitag, 14. Juni 2019 15:08