Keresés

Új hozzászólás Aktív témák

  • Sk8erPeter

    nagyúr

    válasz sorath #1655 üzenetére

    Na, közben rohangásztam, meg kajáltam, de végül sikerült megírni, jól telepakoltam neked kommentekkel, hogy értsd, mit miért csináltam. :D

    #include <stdio.h>
    #include <math.h> /* gyökvonás miatt */
    #include <ctype.h> /* isdigit() miatt */
    #include <stdlib.h> /* atoi miatt */

    int prime_or_not(int number); /* deklaráljuk, hogy van ilyen fv.-ünk. Most nem a feladatban meghatározott legrosszabb algoritmust fogom használni. */

    int main(int argc, char *argv[])
    {
    int min, max, temp;

    if(argc<3){
    /* hibaüzenetek, kilépés hibával */
    fputs("Tul keves a parameter!\n", stderr);
    return -1;
    }

    if( isdigit(*argv[1]) )
    min = atoi(argv[1]);
    else{
    fputs("Az elso parameter nem szam!\n", stderr);
    return -1;
    }

    if( isdigit(*argv[2]) )
    max = atoi(argv[2]);
    else{
    fputs("A masodik parameter nem szam!\n", stderr);
    return -1;
    }

    if(min>max){ /* ezt egy fv.-be is lehetne írni [swap(min,max);], most nem tököltem vele */
    temp=min; /* átmenetileg eltároljuk min értékét, aztán átadjuk max-nak */
    min=max;
    max=temp;
    }

    printf("A %d es %d kozotti primszamok:\n",min,max);
    /* jöhet a prímtesztelés, prímek kiírása */
    for(;min<=max;++min)
    if(prime_or_not(min))
    printf("%d\n",min);

    return 0; /* VÉGE */
    }

    /***** Prímtesztelő függvény *****/

    int prime_or_not(int number){
    int i, divider, max;
    if(number==0 || number==1) return 0; /* ezek nem prímek! */

    max=(int)(sqrt(number)+1); /* "Csak a p≤(négyzetgyök n) -ig szükséges próbálkozni." lásd pl. Wikipédia. Itt: cast-olás. */

    for(divider=1,i=2;(i<max && divider<2);++i)
    /* divider<2-nek az az oka, hogy meghatároztuk a max-ot, és az semmiképp nem érheti el magát a számot, így jelen esetben önmaga nem lesz osztója (mint a szabály szerint), így a divider 2-re se mehet fel a prímeknél sem */
    {
    if(number%i==0) /* ha maradék nélkül megvan a számban az i aktuális értéke */
    divider=i;
    }
    if(divider>1) return 0; /* nem prím */
    return 1; /*egyébként prím */
    }

  • Sk8erPeter

    nagyúr

    válasz sorath #1655 üzenetére

    Láttad a korábbi hsz.-emet?
    Mert amit ide leírtál, az alapján tényleg nem vágod, mire való az argc, argv, pedig azt hittem, egyértelműen leírtam (leírtuk). :D
    De nem is látom az eredeti feladatspecifikációdban, hogy egyáltalán szükség lenne file-kezelésre, file-ba írásra. :D

    Na, de most gyakorlásképp mindjárt megcsinálom neked kompletten a feladatot.

  • Gyuri16

    senior tag

    válasz sorath #1655 üzenetére

    egyaltalan nem ertem mit csinaltal. az eleje (majdnem) jo, igy kellene kineznie:

    if (argc < 3) {
    /* keves parametert adtal meg, irass ki valami hibauzenetet,
    es hogy hogyan kell hasznalni a programodat,
    aztan lepj ki hibakoddal */
    }
    min = atoi(argv[1]);
    max = atoi(argv[2]);

    ekkor a ket parameter amit a programod utan irtal futtataskor a min es max valtozokban lesz. tovabb nincs miert foglalkoznod az argv-vel. a feladatod szerint igy kellene folytatni:
    if (min>max) {
    /* csere: min <--> max */
    }
    int i;
    for (i=min; i<=max; i++) {
    // vegignezzuk az osszes szamot min es max kozott
    /* ha i primszam akkor kiirod ahova kell */
    }

    ott ahol /* kommentar */ van, kell irni meg par sornyi kodot

Új hozzászólás Aktív témák

Hirdetés