programozas
  • Dj Faustus #276
    Szerintem a tomb függvény for ciklusában levő feltételénél lett elrontva, nem vetted bele a kiíratást és az i változó növelését (kiemeltem).

    Szóval ilyesmire módosítottam:
    #include <stdio.h>
    /*Írjon programot, amely a paraméterül kapott min és max érték között kikeresi és listázza a prímszámokat.*/

    int swap(int *i, int *j) {
    int t = *i;
    *i = *j;
    *j = t;
    }

    void tomb(int min, int max) {
    int i, T[max];

    if (min > max)
    swap(&min,&max);

    for( ; min <= max; min++) {
    i = 0;
    if (!((min % 2 == 0 && min != 2) || (min % 3 == 0 && min != 3) || (min % 5 == 0 && min != 5) || (min % 7 == 0 && min != 7) || (min == 1))) {
    T = min;
    printf(" %d ", T[i]);
    i++;
    }
    }
    }
    void main () {
    tomb(0,11);
    printf ("\n");
    }


    Debian Squeeze Linux alatt, gcc (4.4.5) alatt lefordul, fut.
    Amire azért ügyelj (ezeket eszközöltem a mellékelt kódban):
    - Hogy áttekinthető legyen a kód, indentáld: a függvényeknél/eljárásoknál, ciklusoknál, feltételeknél kezd bentebb a műveletet végző "magot"
    - A program magját képező main eljárásba ne rakj bele más függvény deklarációját - ugyancsak csökkenti az áttekinthetőséget.
    - Mivel a tomb függvény kiírást végez, és nem szükséges a max változó kiírása, átalakítottam eljárássá.

    No meg még az a sanda gyanúm, hogy
    - A feladatban szerepel: [i]"programot, amely a paraméterül kapott min és max érték" - ez arra utal, hogy a lefordított programnak kell megadni a min és max értéket, tehát így kell tudnom futtatni Linux alatt a lefordított programot:
    ./prime 0 11
    vagy Windowsban:
    prime.exe 0 11
    Ezért szerintem nézz utána a argv és argc változóknak.
    - Az általad alkalmazott algoritmus jó, de csak a kétjegyű számokhoz. Ha már három számjegyű számokkal dolgozol (tomb(0,200)), akkor megjelenik a 121 is, ami nem prim (11*11).
    Szóval barátkozz meg Eratoszthenész szitájával