c++ primzahl berechnung?!



  • Gute Morgen leibe Community,
    ich habe ein kleines Problem mit meinem Programm zur Bestimmung von Primzahlen. 😞

    /////////////////////////////////////////////////////////////////////////
    #include<stdio.h>
    #include<math.h>
    #pragma argsused
    #include<stdlib.h>
    
     int isprimzahl(int eingabe);
     int main();
    
     int szahl, durchlauf,a,eingabe;
    do
    {
    printf("Bitte entscheiden Sie, welche Pruefung sie durchfuehren wollen! \n\n");
    printf("Druecken sie fuer die Primzahlpruefung bitte die 1!!!! \n\n");
    printf("Druecken sie die 2 fuer eine Liste bestimmter Primzahlen! \n\n");
    scanf("%i",&szahl);
    fflush(stdin);
    switch(szahl)
    {
    printf("Bitte geben Sie die Zahl ein,die geprueft werden soll \n");
    scanf("%i",&eingabe);
    fflush(stdin);
    case 1 :printf(" Sie haben sich fuer die Primzahlpruerung entschieden!\n");
    
           a=isprimzahl(eingabe) ;
    
           if(a==1)
           {
           printf("\nDie Eingegebene Zahl ist eine Primzahl\n");
           }
           else
           {
           printf("\nDie Eingegebene Zahl ist keine Primzahl\n");
           }
            break;
    
    case 2:printf(" Sie haben sich fuer die  Liste bestimmter Primzahlen entschieden\n");
    
           break;
    }
    
      fflush(stdin);
    
    printf("Moechten sie das Programm nochmal starten? Fuer ja=1 und fuer nein =0");
    scanf("%i",&durchlauf);
    
    system("cls");
    
    }
    
    while(durchlauf==1);
    
             getchar();
             return 1;
             }
    ///////////////////////////////////////////////////////////////////////////////
    
    int isprimzahl(int eingabe);
    
    int h;
    int prim=1;
    
    {
    
    for(h=2;h<eingabe;h++)
    
    {
    
    if(eingabe%h==0)
    {
    prim=0;
    
    }
    if(prim==1)
    {
    return(1);
    
     }
    else
    {
    return(0);
    }
    }
    
     getchar();
    

    Mein Problem ist,dass das Programm nach der Rechnung wieder nach oben springen soll und in Case 1 die Lösung ausgeben soll.Ich habe mich schon umgesehen, aber noch keine Hilfe für mein Problem gefunden.

    MfG Peter 😃

    //Tags



  • Hallo,
    bevor ich mir das durchlese, bitte ich dich Code Tags zu verwenden. Ich möchte doch nicht an Augenkrebs sterben.

    Um Primzahlen zu berechnen bietet sich an, mit Modulo zu arbeiten. Außerdem: Was soll den das Semikolon hinter main? Kann es außerdem sein, dass da C drin ist??

    lg, freakC++



  • meinst das bringt was 😃

    /////////////////////////////////////////////////////////////////////////
    #include<stdio.h>
    #include<math.h>
    #pragma argsused
    #include<stdlib.h>
    
    int isprimzahl(int eingabe);
    int main();
    
    int szahl, durchlauf,a,eingabe;
    do
    {
    printf("Bitte entscheiden Sie, welche Pruefung sie durchfuehren wollen! \n\n");
    printf("Druecken sie fuer die Primzahlpruefung bitte die 1!!!! \n\n");
    printf("Druecken sie die 2 fuer eine Liste bestimmter Primzahlen! \n\n");
    scanf("%i",&szahl);
    fflush(stdin);
    switch(szahl)
    {
    printf("Bitte geben Sie die Zahl ein,die geprueft werden soll \n");
    scanf("%i",&eingabe);
    fflush(stdin);
    case 1 :printf(" Sie haben sich fuer die Primzahlpruerung entschieden!\n");
    
    a=isprimzahl(eingabe) ;
    
    if(a==1)
    {
    printf("\nDie Eingegebene Zahl ist eine Primzahl\n");
    }
    else
    {
    printf("\nDie Eingegebene Zahl ist keine Primzahl\n");
    }
    break;
    
    case 2:printf(" Sie haben sich fuer die Liste bestimmter Primzahlen entschieden\n");
    
    break;
    }
    
    fflush(stdin);
    
    printf("Moechten sie das Programm nochmal starten? Fuer ja=1 und fuer nein =0");
    scanf("%i",&durchlauf);
    
    system("cls");
    
    }
    
    while(durchlauf==1);
    
    getchar();
    return 1;
    }
    ///////////////////////////////////////////////////////////////////////////////
    
    int isprimzahl(int eingabe);
    
    int h;
    int prim=1;
    
    {
    
    for(h=2;h<eingabe;h++)
    
    {
    
    if(eingabe%h==0)
    {
    prim=0;
    
    }
    if(prim==1)
    {
    return(1);
    
    }
    else
    {
    return(0);
    }
    }
    
    getchar();
    


  • helpedff schrieb:

    meinst das bringt was 😃

    Bei den fehlenden Einrückungen, nein, nicht wirklich. Der Code ist extrem unleserlich. Zudem bist du im falschen Unterforum (zumindest sehe ich beim überfliegen kein C++, sondern ausschließlich C).

    Zudem ist das getchar (Zeile 101) außerhalb einer Funktion fehlplatziert, oder es fehlt hier Code. Von anderen Unsitten wie globalen Variablen etc. einmal abgesehen.

    P.S: Und WAS funktioniert nicht. Du hast keinerlei Frage gestellt. Meinst du etwa das wir deinen Code erst selbst linken müssen?



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Wenn man alles an die richtige Stelle tut, funktioniert es sogar. 👍

    #include <stdio.h>
    #include <math.h>
    #include <stdlib.h>
    
    int isprimzahl(int eingabe);
    
    int main()
    {
    	int szahl, durchlauf, a, eingabe;
    
    	do
    	{
    		printf("Bitte entscheiden Sie, welche Pruefung Sie durchfuehren wollen.\n");
    		printf("Druecken Sie fuer die Primzahlpruefung bitte die 1.\n");
    		printf("Druecken Sie die 2 fuer eine Liste bestimmter Primzahlen.\n");
    
    		scanf("%i", &szahl);
    		fflush(stdin);
    
    		switch (szahl)
    		{
    			case 1:
    				printf("Bitte geben Sie die Zahl ein, die geprueft werden soll.\n");
    				scanf("%i", &eingabe);
    				fflush(stdin);
    
    				printf("Sie haben sich fuer die Primzahlpruefung entschieden.\n");
    				a = isprimzahl(eingabe);
    
    				if(a == 1)
    				{
    					printf("Die eingegebene Zahl ist eine Primzahl.\n");
    				}
    				else
    				{
    					printf("Die eingegebene Zahl ist keine Primzahl.\n");
    				}
    				break;
    
    			case 2:
    				printf("Sie haben sich fuer die Liste bestimmter Primzahlen entschieden\n");
    				break;
    		}
    
    		printf("Moechten sie das Programm nochmal starten? Fuer ja=1 und fuer nein=0: ");
    		scanf("%i", &durchlauf);
    		fflush(stdin);
    
    	} while(durchlauf == 1);
    
    	return 1;
    }
    
    ///////////////////////////////////////////////////////////////////////////////
    
    int isprimzahl(int eingabe)
    {
    	int h, prim = 1;
    
    	for(h = 2; h < eingabe; h++)
    	{
    		if(eingabe % h == 0)
    		{
    			prim = 0;
    			break;
    		}
    	}
    
    	return prim;
    }
    


  • Einrücker vD schrieb:

    int isprimzahl(int eingabe)
    {
    	int h, prim = 1;
    
    	for(h = 2; h < eingabe; h++)
    	{
    		if(eingabe % h == 0)
    		{
    			prim = 0;
    			break;
    		}
    	}
    
    	return prim;
    }
    

    ^^ man muss doch nur bis sqrt(eingabe) suchen. es reicht ja, wenn ein teiler gefunden ist. und vorher noch auf teilbarkeit durch 2 checken, dann also:

    if (eingabe & 1 == 0)
      return 0;
    for (h = 3; h*h <= eingabe; h+=2)
    {
       ...
    }
    

    🙂


Anmelden zum Antworten