Komapaktheit bei Restriktionen



  • Hallo liebe C Programmierer,
    falls noch andere zu dieser unchristlichen Stunde hier sind. Ich wollte eine einfache Frage bezüglich der Bedingungen in if (......) Anweisungen erfragen.
    Hier ein Beispiel:

    #include<stdio.h>
    #include<stdlib.h>
    
    main(){
    unsigned int q[8]={7,11,13,17,19,23,29,31};
    int succes,setzentscheider,feldschranke1=0,feldschranke2=10;primsucher;
    
    srand(time(NULL));
    
    do{	success=0;
    	int setzentscheider = rand() % 3;
    	int primsucher = rand() %100;
    		if(primsucher!=2,3,5,7,9&&.....
    

    unzwar ist die Frage, ob es in C eine Möglichkeit gibt, wie in Zeile 14
    pseudocodemäßig hingeschrieben, in einer einzelnen Bedingung gleich mehrere
    Werte zu verneinen, um mehrfaches Formulieren mit && zu umgehen oder
    muss man es einzeln alles in den Kopf der Bedingten Anweisung reinschreiben ?



  • softpad schrieb:

    falls noch andere zu dieser unchristlichen Stunde hier sind

    Grad viele Informatiker sind nachtaktiv.

    softpad schrieb:

    unzwar ist die Frage, ob es in C eine Möglichkeit gibt, wie in Zeile 14
    pseudocodemäßig hingeschrieben, in einer einzelnen Bedingung gleich mehrere
    Werte zu verneinen, um mehrfaches Formulieren mit && zu umgehen oder
    muss man es einzeln alles in den Kopf der Bedingten Anweisung reinschreiben ?

    Nein, das geht so nicht. Entweder schreibst du alles mit && aus, oder du packst es in eine Liste/Set oder ähnliche Struktur und prüfst, ob der Element darin vorkommt.



  • Du kannst Zeile 14 wie folgt schreiben:

    if ( primsucher != 2 && primsucher % 2 == 0 )
    


  • ok danke und
    1.)wie sähe eine solche Liste aus ?

    und weist du vielleicht auch wieviele Bedingungen man eigentlich in den Kopf einer if Restriktion setzen kann.

    for(;;){
    
    if (x!=y&& x<1000 && .......
    .............................................)
    

    ?



  • danke



  • softpad schrieb:

    1.)wie sähe eine solche Liste aus ?

    Zum Beispiel ein Array. Dann mit einer Schleife durchiterieren und überprüfen ob ein bestimmter Wert enthalten ist.

    softpad schrieb:

    und weist du vielleicht auch wieviele Bedingungen man eigentlich in den Kopf einer if Restriktion setzen kann.

    Beliebig viele.



  • softpad schrieb:

    wie in Zeile 14
    pseudocodemäßig hingeschrieben, in einer einzelnen Bedingung gleich mehrere

    Kannste NICHT zusammenschreiben.

    Wenn Du Rechenzeit einsparen willst, kannste ein Array nehmen mit

    //unsigned int q[8]={7,11,13,17,19,23,29,31};
    unsigned bool q[30]={0,0,0,0,0,0,0,1,0,0,0,1,0,1...1,0,1}//gesetzt an 7,11,13…29,31
    
    if(q[primzahlkandidat%30]==0)
        …
    statt
    if(primzahlkandidat%2==0 || primzahlkandidat%3==0 || primzahlkandidat%5==0)
        …
    

    Aber mir ist völlig unklar, was Dein Programm bewirken soll.



  • Da die Liste sehr wahrscheinlich dynamisch wachsen soll, kann es kein Array mehr sein, sondern sollte eine mit realloc wachsende Liste sein.
    Darin dann was zu suchen geht einfach mit POSIX lfind.



  • Was spricht dagegen eine std::map zu verwenden?
    Sollte ja schneller sein ein Element mittels Hashmap zu finden, als eine Liste/Array komplett zu durchsuchen, oder?



  • My2Cents schrieb:

    Was spricht dagegen eine std::map zu verwenden?

    C


Anmelden zum Antworten