Új hozzászólás Aktív témák
-
sorath
csendes tag
régen c++ ban sokat programoztam igaz ijen alap szinten aztán most ojan fura c ben h ijen fügvénymegadások villamosmérnöknek tanulok és ijent kérnek főleg h magas feszen mert vannak akik kisfeszen vannak azoknak ok nekik kell plc ket meg mikro procikat stb stb na mind1 még 1 szer kösz szépen
-
Sk8erPeter
nagyúr
Honnan indítod el így? Ha mondjuk Total Commanderben adod be neki így a két paramétert, akkor gyorsan lefut, aztán kilép a fenébe. Az MS-DOS parancssorról kell beadni neki. Vagy akkor tegyél a return elé egy várakoztatást, mondjuk Windows alatt beteheted akár a system("PAUSE"); sort is, de ez alapból kerülendő: Things to Avoid in C/C++ -- system("pause"), de egy ilyen full egyszerű programnál nem lesz bajod belőle.
Kipróbáltam a programot, mielőtt bemásoltam volna, működik, "a hiba az Ön gépében van". Amúgy szívesen... -
Sk8erPeter
nagyúr
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.
#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
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).
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.Na, de most gyakorlásképp mindjárt megcsinálom neked kompletten a feladatot.
-
Gyuri16
senior tag
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
-
Sk8erPeter
nagyúr
Szerintem eleve félreérted az argc, argv szerepét: itt nem kell scanf, mivel a program neve mögött szereplő paraméterekre vagy kíváncsi, abból tudod meg azt, amit Te a scanf-fel akarnál megtudni.
Ha Windows-t használsz, akkor nyiss egy Start- Futtatás- cmd -t, navigálj el arra a könyvtárra, ahol a lefordított programod van az exe-fájllal. Ha a korábban említett "akarmi.exe" a programod neve, akkor írd be ezt a cmd-nél parancsnak:
akarmi.exe 10 50
Aztán Enter, és a programodnak mennie kell a megadott paraméterekkel.
De ezt már írtam korábban is. Ekkor a 10 lesz a min, 50 a max, ha jól csináltad. -
Gyuri16
senior tag
ez a progam igy nem korrekt. egyreszt szintaktikailag se jo (eredet(i) helyett eredet[i]). masreszt a beolvasasod se jo, mivel a valtozodat mindig felulirod, igy csak az utolso betut jegyzed meg
hogy az eredeti kerdesre valaszoljak: isalpha() fuggveny segithet, ez megnezi, hogy a char amit adsz neki betu e, ha csak kisbetuk erdekelnek akkor islower()
#1650:
Sk8erPeter szepen osszefoglalta pedig. probald meg a programot a hsz-e vegerol lemasolni. irj hozza annyit, hogy kiirasd a ket valtozot. ezutan forditsd le, es futtasd a ket parameterrel -
Sk8erPeter
nagyúr
argc, argv:
Vegyük azt, hogy a main függvényednek így néz ki a fejléce:
int main(int argc, char *argv[])
{
/* blabla */
}Itt az argc azt határozza meg, hány paramétered van+1. Azért +1, mert ebben a számban benne van magának a futtatandó programodnak a neve is (pl. akarmi.exe a futtatandó fájlod; de NEM maga a programnév, mint string van benne, hanem csak plusz egy "paraméter").
Az argv pedig sztringre mutató mutatók tömbje, azért char * argv[] (ez ekvivalens ezzel: char **argv); ez megmondja, hány string szerepel a parancssorban. A 0. index maga a program neve (a korábban említett akarmi.exe), mint string, az 1. index (és az azt követő indexek) pedig az(ok), ami(ke)t a fájl neve mögé írtál: akarmi.exe parameter1 (parameter2 parameter3...)Eszerint ellenőrizgethetsz: pl. azt is csekkolhatod ilyen módon, hogy a program neve után pontosan annyi paramétert adtak-e meg, mint amennyit elvártál, és/vagy a paraméter(ek) neve megegyezik-e valamilyen értékkel, amitől függően hajtasz végre mondjuk egy műveletet, stb...
A Te esetedben ("min és max érték között kikeresi és listázza a primszámokat") pl. így hívod meg a programot a parancssorból:
akarmi.exe 10 50Még az elején include-old az stdlib-et, és akkor átalakíthatod a paraméterként kapott sztringet egész számmá az atoi függvénnyel:
#include <stdlib.h>Végezz egy ellenőrzést, hogy a paraméterek száma nem kisebb-e a szükségesnél (kell a min és a max is):
if(argc<3)
/* hibaüzenetek, kilépés hibával */;A korábban int-ként deklarált min és max változóknak pedig add át a megfelelő értékeket:
min = atoi(argv[1]);
max = atoi(argv[2]);Ezt követően pedig végezd el a prímtesztelést.
Összefoglalva (a konkrét kiegészítés már a Te dolgod):
#include <stdio.h>
#include <stdlib.h>int main(int argc, char *argv[])
{
int min, max;
if(argc<3)
/* hibaüzenetek, kilépés hibával */;
min = atoi(argv[1]);
max = atoi(argv[2]);
/* ide jöhet a prímtesztelés */
}
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Mikrotik routerek
- Formula-1 humoros
- Építő/felújító topik
- Jövőre jósolják a memóriahiányt, ami egy évtizedig is fennmaradhat?
- Formula-1
- Samsung Galaxy A56 - megbízható középszerűség
- Apple iPhone 17 Pro Max – fennsík
- Programozás topic
- Windows 11
- gban: Ingyen kellene, de tegnapra
- További aktív témák...
- Intel X540-T2 - 2x10GbE RJ45 LAN kártya
- Eladó PC - GTX 1070 OC i5 6600
- HP Elitebook 850 G8 FHD, i5-1135G7 CPU, 16GB DDR4, 256GB SSD, 27% ÁFÁS SZÁMLA, 1ÉV GARANCIA!
- BESZÁMÍTÁS! Logitech G920 Driving Force Racing kormányszett
- BESZÁMÍTÁS! Acer Predator Helios 300 17 FHD notebook - i7 9750H 32GB DDR4 1TB SSD RTX 2060 6GB W11
- GYÖNYÖRŰ iPhone 13 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3576, 90% Akkumulátor
- Telefon felváráslás!! Xiaomi Redmi Note 11, Xiaomi Redmi Note 11 Pro, Xiaomi 11 Lite
- AKCIÓ!!! Dell Latitude 5320 i3-1125G4 16GB 256GB magyarbill. 1 év garancia
- Creative Sound BlasterX H6 Gamer fejhallgató számlával és garanciával
- GYÖNYÖRŰ iPhone 12 Pro Max 128GB Blue -1 ÉV GARANCIA - Kártyafüggetlen, MS2107, 100% Akkumulátor
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest