programozas
-
#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