- Apple iPhone 16 Pro - rutinvizsga
- Samsung Galaxy A56 - megbízható középszerűség
- Nothing Phone (3a) és (3a) Pro - az ügyes meg sasszemű
- One mobilszolgáltatások
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- VoLTE/VoWiFi
- Mobil flották
- Xiaomi 15 - kicsi telefon nagy energiával
- Google Pixel 8a - kis telefon kis késéssel
- Samsung Galaxy S25 - végre van kicsi!
Új hozzászólás Aktív témák
-
Sk8erPeter
nagyúr
válasz
EQMontoya #5218 üzenetére
"ezt a hozzászólást már csak Lezsonak kell belinkelned, hogy c++ kulcsszóra miért nem találja meg a kereső"
Idézőjelek közé téve a keresőszót már megtalálja a kereső a topicot: [link]. A legtöbbször így kell itt kutatni a pontosság kedvéért (legalábbis ilyen jellegű keresőszavaknál biztosan), különben elég sok fura "valami hasonló" találat jöhet ki, ami valójában nem is hasonlít (mint pl. itt az idézőjelek nélküli változat). -
Sk8erPeter
nagyúr
válasz
cooldongo #3253 üzenetére
Itt nem hiszem, hogy használtad.
Később fejlődtél, ez becsülendő.
Na, most már vágod a függvény működését? Azt is, hogy hogyan tudod megvizsgálni a függvény visszatérési értékét?Gondold végig, mire is vagy kíváncsi, ilyenkor használd nyugodtan a magyar nyelvet először (vagy amilyen nyelven könnyebben tudsz gondolkodni, felőlem mongol is lehet
):
HA egybeesik, akkor:
kiírom, hogy fasza, egybeesik
EGYÉBKÉNT
kiírom, hogy vazze, nem esik egybena, ezt most fordítsd le szépen C-re (ha >>> if, egyébként >>> else, és így tovább), meg a kódod nyelvére, és akkor máris meglesz a megoldás... remélem így már kapiskálod.
(#3254) kingabo:
Inkább maradjon csak a visszatérési értéknél, nehogy rászokjon ilyen hülyeségekre, hogy a függvényen belül íratja ki... -
Sk8erPeter
nagyúr
válasz
cooldongo #3249 üzenetére
Használd már azt a nyomorult Programkód gombot kérlek.
Kijelölöd a kódrészletet, majd rákattintasz erre a gombra, és máris normálisabban fog kinézni a beillesztett kód (lásd alább).
Szerk.: látom kingabo ugyanerre hívta fel a figyelmed, jogosan.int egybeesik(struct kor y, struct kor z)
{
...
int b;
...
return b;
}A b-t deklarálod, de nincs inicializálva sem, és értéket sehol nem kap. Akkor szerinted miért kéne visszaadnia a helyes eredményt?
return (y.x==z.x && y.y==z.y) ? 1 : 0;
bocs, ha lelőttem a poént...
-
Sk8erPeter
nagyúr
válasz
Korcsii #3244 üzenetére
Ne oltogassátok má' szegény csávót, elveszitek a maradék kedvét is.
Szerintem egyébként ebben az esetben ez az általad alkalmazott conditional operator talán logikusabb is, mint egy szétbontott if-else. Persze tényleg ekvivalens mindkettő, csak ilyen esetekre szerintem tipikusan jól alkalmazható, amit mutattál.
-
Sk8erPeter
nagyúr
F×ngom sincs, hogy mennyit kell hozzá programozni, de furcsa volt, hogy robotvezérlős versenyen akartok részt venni, ahol elvileg szükség van programozásra is, de nem tudsz programozni, és mégis indulni szeretnél. Mondjuk ha elhivatott vagy, és utánanézel, az jó. De azért nem kell ám annyira felháborodni, nem sértegetés a célom.
-
Sk8erPeter
nagyúr
válasz
kovacsakos91 #3072 üzenetére
Szívesen.
Ennyi idő alatt az összes példát végignézted, és felfedezted, hogy nahát, ezek között egy sincs, ami ahhoz hasonló lenne? Kétlem...
Ezeket tudtam linkelni. -
Sk8erPeter
nagyúr
válasz
Sk8erPeter #3070 üzenetére
Még egy link: [InfoC portál]
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
válasz
WonderCSabo #2943 üzenetére
Ja, sorry, akkor félreértettem azt a mondatrészt, hogy "jelzett is a gcc"... nyilván nem a függvény hibás mivoltára mondtam, hogy fordítási hiba, amikor az rossz eredményt ad vissza, hanem az esetleges warningokra, errorra, amit kaphatott akkor, amikor inicializálatlan változója volt..
(#2944) szkorhetz : hát látom ez nem jött össze....
Pedig annyira nem nehéz...kijelölöd a programkódot, majd azután rákattintasz a Programkód gombra, ez a nagy mágia...
-
Sk8erPeter
nagyúr
Ennek tükrében viszont elég érdekes, hogy "a Biro is megkajalta max pontszammal", ha full hibás, és még fordítási hibát is jelzett...
Nálunk egy BME-s programnál (Cporta) bármilyen fordítási hiba volt tapasztalható, nem fogadták el. (Lehet, hogy azóta enyhítették ott is.)
-
Sk8erPeter
nagyúr
Miért, ott kiszedik az -lm kapcsolót?
Ha az
#include <math.h>
sort nem hagytad ki, sajnos elvileg ekkor is kellene az -lm kapcsoló: [link].Nem úgy működik, hogy feltöltöd a .c fájlodat, azt meg ott lefordítják?
Elég idióta dolog lenne, ha ott kiszednék ezt a kapcsolót a hallgatókkal való kiszúrásdiból. Vagy kikötötték, hogy nem használhatsz math.h-s függvényeket, vagy mi?Az sqrt() nem olyan, amit tiltani szoktak.
"Nem, az ilyen *,& stb-re gondoltam"
Olvasd el ezt a fejezetet: [link].===
(#2935) Korcsii : "off: ui: cportán debugolni rulz" hell yeah!
-
Sk8erPeter
nagyúr
válasz
szkorhetz #2928 üzenetére
Előbb nézzen ki normálisan a kódod.
Ajánlom ezt az oldalt:
http://indentcode.net/Ide meg a kódot normális kinézettel úgy illeszd be, hogy kijelölöd, majd megnyomod a Programkód gombot. Különben senki nem fogja ezt neked átnyálazni. Vagy rakd fel pastebinre, és nyomj rá a C-s szintaktika-kiemelésre.
-
Sk8erPeter
nagyúr
Pont azt mondja a hibaüzenet (elég beszédes), hogy már definiálva van...
--> [link]és ha az alábbi módon próbálod?
GtkEntry *entry;
const gchar *test;
entry = GTK_ENTRY(szerzo);
test = gtk_entry_get_text(entry);(még nem használtam, csak az alapján gondolom, hogy így jó, ami a doksiban van, nem garantálom, de sanszos)
Szerk.: de épp így csinálják itt is: [link] (ebből a kódból gondolom amúgy is tudnál mintát venni) -
Sk8erPeter
nagyúr
válasz
Neoteric #2856 üzenetére
"egyetemen tanítják most a C++-t"
Viszont ez a C topic... Van külön C++ programozásáról szóló topic is.Itt találhatsz az 1.5.4-es pontban egy szószámlálós példakódot (sima C-ben): [Kernighan-Ritchie: A C programozási nyelv]
Ehhez hasonló a Te feladatod is, csak Te nem szóközöket, tabulátorokat és sortöréseket keresel, hanem pontokat, felkiáltójeleket, kérdőjeleket, és azt, hogy ezek valamelyike után nagybetű szerepel-e.
Angol karakterek esetén nagybetű-ellenőrzésre pl. ott az isupper függvény: [link]. -
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
Biztos nincs include-olva valami szükséges lib, vagy a franc se tudja kitalálni így a kódod nélkül...
Egyébként ha már beírsz egy kérdést, és megtaláltad rá a megoldást (ld. előző kérdésed), nem ártana, ha leírnád, mi volt az.
Hátha más is találkozik vele...
egyébként elképesztő, hány helyen sírnak a Code::Blocks miatt (még egyetemi levlisták is tele vannak ezzel kapcsolatos problémákkal), hogy valami nem jön össze vele, hihetetlen, hogy még mindig nem sikerült úgy megcsinálni ezt a programot, hogy egy kezdő számára is totál kézenfekvő legyen vele minden, és ne kelljen külön szopni vele, hogy be legyen konfigolva. Vagy ez az első szűrő?Szerk.: látom szerkesztetted a hsz.-edet, és bemásoltad a példakódot. Első körben pl. ezt a fórumot láttad? Vagy ezt.
-
Sk8erPeter
nagyúr
válasz
RexpecT #2643 üzenetére
Én speciel nem oda járok.
Jé, nahát, van, ahol gazdinfón is tanítanak C-t?Ez meglep. Haverom Corvinusra jár ugyanilyen szakra, náluk kapásból C#-pal kezdtek.
Tulajdonképpen nem is tudom, melyik a jobb módszer. Rengeteg orbitális szopást átélni kezdő programozóként a sima C-vel, vagy kicsit kevesebb szívással elkezdeni gányolni egy magasabb szintű nyelven.
Nem könnyen eldönthető kérdés, de így utólag talán azt mondanám, számomra jobban megérte C-vel kezdeni a hajtépést, és ezáltal később kicsit jobban érteni a magasabb szintű nyelvek működését - meg átérezni, hogy mennyivel kevesebb felé kell figyelni, minél "feljebb" megyünk. -
Sk8erPeter
nagyúr
Én is fedeztem fel benne hibákat, ettől függetlenül még mindig ajánlottnak tartom, legalábbis én nem ismerek jobb könyvet, de ez persze lószart sem jelent, biztosan van pár.
Ettől függetlenül a srác rákérdezett, hogy ebből lehet-e tanulni, szerintem lehet.Amúgy én is kényelmetlennek találom a C-ben programozást, dehát attól még szükséges rossz - nekem, de van, aki annyira jó benne, hogy éppen a magasabb szintű nyelvek nem szimpatikusak neki. Meg hát elvitathatatlan erényei vannak gyorsaság terén is (meg lehetséges hibaforrások terén is
). De ha már homár, akkor már nekem még mindig ezerszer inkább C++.
-
Sk8erPeter
nagyúr
Miért nem szöveg formájában másoltad be a feladatot?
Csak mert a másik fórumba is ilyen kép formájában tetted be, és ezzel csak megnehezíted annak a feladatát, aki megcsinálná neked, mert így még a fejlesztőrkörnyezetbe sem tudja legalább kommentként bemásolni, hogy tudja, mit is kell csinálni. Nem fog a kedvedért váltogatni az ablakok közt.Nekem vizsgám van holnap, úgyhogy én tuti nem tudom megcsinálni, de gondoltam azért javaslom, hogy inkább másold be szöveg formájában. Vagy még erre sem volt időd?
-
Sk8erPeter
nagyúr
válasz
Nyiscsák #2557 üzenetére
Nincs mit!
Mindig kerüld el ezeket a system(...) jellegű függvényhívásokat, mindig megoldható másképp, könyvtári függvényekkel is.
Ez egy feleslegesen erőforrásigényes rendszerhívás, ráadásul NEM platformfüggetlen.Jester01-nek igaza van, lehet tovább egyszerűsíteni és gyorsítani, így még jobb:
int tobbszor( int* pTomb, int size )
{
int i, j;
for ( i = 0; i < size; i++ ){
for ( j = i+1; j < size; j++){
if (pTomb[j]==pTomb[i])
return 1;
}
}
return 0;
}Tehát a belső for ciklusban i+1-től vizsgálódom, felesleges újra és újra végigmenni az egész tömbön, ráadásul így eleve az aktuális tömb utántól indul a vizsgálat.
======
(#2556) Jester01: you're right.
Először arra gondoltam, az úgy nem jó, mert nem rendezett a tömb, aztán rájöttem, hogy ez baromság, mert egyszer már az elejétől végigszaladgáltunk, minek újból, kicsit fáradt vagyok...
-
Sk8erPeter
nagyúr
válasz
Nyiscsák #2546 üzenetére
Ezt a
system("PAUSE");
baromságot nagyon gyorsan felejtsd el (egyszer össze kéne számolni, hányszor hangzott el ez a topikban).
Gondolom valami gyökér tanár mutatta ezt a szarságot, vagy valami gány fórumon szedted össze.
Ott van helyette pl. a getchar();Ezenfelül jobb lenne, ha azonnal visszatérnél, amint egyezést találtál egy korábbi számmal (minek végigmenni rajta teljesen?).
if (pTomb[j]==pTomb[i])
ez a feltételvizsgálat nálad legalább egyszer mindenképp igaz lesz, amikor önmagával hasonlítod az elemet, felesleges ezt vizsgálni.
Szóval így is lehet:
int tobbszor( int* pTomb, int size )
{
int i, j;
for ( i = 0; i < size; i++ ){
for ( j = 0; j < size; j++){
if (i!=j && pTomb[j]==pTomb[i])
return 1;
}
}
return 0;
} -
Sk8erPeter
nagyúr
válasz
Szőkecica #2431 üzenetére
A Monospace betűtípus is fontos, ettől válik áttekinthetővé, hogy rögzített szélességű karakterek láthatók a kódban, lásd pl. Courier New.
Ezt pedig a [M][/M] jelöli.
A [ C ][ /C ] (szóközök nélkül a szögletes zárójelben) pedig azt jelöli, hogy a szöveg konvertálatlan formában kerül kiírásra, nem lesz levágva a sok szóköz egyetlen szóközzé, stb.
A Programkódnál pedig így néz ki a szövegformázás: [ M ][ C ]#include <stdio.h>...[ /C ][ /M ] (megint szóközök nélkül a szögl. zárójelben), tehát vonatkozik rá a Monospace és Konvertálatlan gomboknál (ilyen is van!) elérhető beállítás is.
Remélem egy kis PH!-lecke után már érthető.---
...és nem egyenlőre, hanem egyelőre. -
Sk8erPeter
nagyúr
válasz
WonderCSabo #2422 üzenetére
ja, bár igazából nem tiszta, mi olyan nehéz rajta, amikor még közöm nem volt a programozáshoz, akkor is próbálgattam ezeket a gombokat, mire valók, 5 perc szerkesztési idő azért elég sok mindenre, meg még van külön próbálkozásokra szánt topic is.
-
Sk8erPeter
nagyúr
válasz
Szőkecica #2419 üzenetére
#include <stdio.h>
int main()
{
int bytes_read;
int nbytes = 100;
char *my_string;
puts ("Please enter a line of text.");
/* These 2 lines are the heart of the program. */
my_string = (char *) malloc (nbytes + 1);
bytes_read = getline (&my_string, &nbytes, stdin);
if (bytes_read == -1)
{
puts ("ERROR!");
}
else
{
puts ("You typed:");
puts (my_string);
}
return 0;
}"The getline function reads an entire line from a stream, up to and including the next newline character. It takes three parameters. The first is a pointer to a block allocated with malloc or calloc. (These two functions allocate computer memory for the program when it is run. See Memory allocation, for more information.) This parameter is of type char **; it will contain the line read by getline when it returns. The second parameter is a pointer to a variable of type size_t; this parameter specifies the size in bytes of the block of memory pointed to by the first parameter. The third parameter is simply the stream from which to read the line."
-
Sk8erPeter
nagyúr
válasz
Szőkecica #2417 üzenetére
Érdemes inkább egy header fájlba belerakni a deklarációkat, és a header-fájlt include-olni.
Általában úgy van a fejlesztőkönyezeteknél megoldva, hogy ha berakod a header-fájlok közé a valami.h-t, és a projekt source fájljai között ott van a valami.c, akkor az #include "valami.h" (valami.h-ban vannak a deklarációk!) sor hatására (ezt a main() elé teszed természetesen) látni fogja a függvénydefiníciót (ami a valami.c-ben van).Most meg megmutatom, hogy végre hogyan használd a Programkód gombot, felhasználva a Te kódodat, kicsit átalakítva.
A main-nek mindig legyen int a típusa, és mindig legyen visszatérési értéke, ami problémamentes lefutás esetén az általános programozási gyakorlat szerint a main()-ben 0, hiba esetén 1 vagy ettől eltérő szám.#include <stdio.h>
#include "valami.h"
#define TOL 1
#define IG 10
int main()
{
int i;
for(i=TOL; i<=IG; ++i)
{
printf(" %d kobe => %d\n", i, kob(i) );
}
return 0;
}1.) Kijelölöd, a kódrészletet.
2.) Rákattintasz a "Programkód" gombra.
3.) Kész.Remélem nem olyan bonyolult ezek után...
-
Sk8erPeter
nagyúr
válasz
Szőkecica #2382 üzenetére
Könyörgöm, használjátok már a "Programkód" gombot kód bemásolásakor, arra való, hogy ne egy okádék legyen a hozzászólásban, hanem valami átláthatónak tűnő kód...
Kódodat kijelölöd, majd megnyomod a Programkód gombot, voilá, máris átláthatóbb.
Ha nagyon nem megy, ott van a Pastebin is.Nem csak rád vonatkozik, de nagyon zavaró, hogy ennyien másoltok be ide formázás nélküli kódokat, utólag a topic és a konkrét kódok olvashatatlanok lesznek.
Legalábbis én ilyenkor úgy vagyok vele, hogy meg sem próbálom megérteni a kódot (akár segítségkérés, akár válasz), van jobb dolgom is.
Ne vegye senki bántásnak, inkább jótanács+kérés. -
Sk8erPeter
nagyúr
válasz
cellpeti #2013 üzenetére
"ez a szar" egy eléggé alaptantárgy az informatikus képzésben...
A Karma által írt votes tömbben tárolod, hogy épp melyik szavazatból mennyi érkezett, azt növelgeted, amikor érkezik egy szavazat. Arra mondjuk figyelni kell, hogy érvénytelen szavazatnál ne indexeld túl a votes tömböt, előtte megfelelő ellenőrzéssel.
-
Sk8erPeter
nagyúr
Jó, hát ilyen alapon a Z betű is a specifikációnak megfelelő bemenet, csak érvénytelen szavazatnak számít...
Akkor meg a votes tömböt jól túlindexelted, akkor már szét lehetne bontani...
Mi van, Te is rászoktál a zöld fejre?
(nem kell ám rám haragudni azért, mert mertem szólni én is valamiért, ja, de nyilván csak abba lehet belekötni, amikor én írok meg egy részprogramot itt a topicban...)
-
Sk8erPeter
nagyúr
Ez így van, mint említettem, gyors megoldás volt, és közel sem tökéletes.
Legközelebb majd nem írok a topicba, ha épp nincs túl sok időm rá.
Mondjuk az azért mókás, hogy sokszor előfordul, hogy jó darabig senki nem ír választ egy kezdő kérdésre, viszont ha valaki ad egy lehetséges gyorsmegoldást, akkor arra hirtelen mindenki rárepül, mint a dögkeselyűk.
Inkább valaki írjon akkor egy tökéletes megoldást, és akkor túl is van tárgyalva. Nekem nem volt időm átgondolni, leírtam, ami jött. Bocs.(#1994) Karma: oké, nem húztam én fel magam egyáltalán, csak én is leírtam, ami a szívemet nyomta!
Amúgy nagyon kemény, hogy mennyire amatőr feladaton vitázunk, de azért jó móka.A kezdeti hsz.-em többi részét (ahol leírom, miért nem jó a srác kódja) tovább tartott megírni, mint magát az alatta lévő kódot, amin most vitatkozunk.
(#1995) Gyuri16: igen, közben én is arra gondoltam, hogy tomb1-hez nem feltétlenül lesz jó az strlen. Azt viszont mondtam, hogy zárja le 0-val a ciklus után...
-
Sk8erPeter
nagyúr
Úúú basszus, teljesen igazad van, az lemaradt, köszi, hogy szóltál.
És igen, vagy (||) helyett és (&&) kellene...
Látszik, hogy sietve írtam (eddig nem kapott választ a srác), bocsesz.zserrbo, a for ciklust javítanám, pl. ha van egy i és egy j változód, akkor pl. ilyesmi lenne:
for(i=j=0; i<strlen(tomb1) && i<strlen(tomb2); i++){
if(tomb2[i] != '\t' && tomb2[i] != ' '){
tomb1[j]=tomb2[i];
j++;
}
} -
Sk8erPeter
nagyúr
válasz
zserrbo #1984 üzenetére
Érdekes ez a feladat-meghatározás, ha így kezdődik: "Paraméterei két karakter tömb." - minek a paraméterei...? Ki lehet találni, hogy egy függvénynek, de az egész specifikáció elég gyengusz.
Akkor menjünk sorba a programodon:
main ()
ne szokj rá, hogy ezt használod, írd ki explicite a visszatérési értéket:
int main(){
/*...*/
return 0; /* ha nincs hiba*/
}int i;
char tomb1[i];
char tomb2[i];
Ez meg micsoda?Eleve i-nek nincs semmi kezdőértéke, hogy akarod így létrehozni i-vel a tömböt? Mekkora méretű lesz a tömb?
scanf ("%c",tomb1);
Egyetlen karaktert olvasol tomb1 0. indexe helyére...
Használhatnád pl. a getchar() függvényt EOF-ig, vagy ameddig meghatározod, hogy beolvassson (mit adjon meg a felhasználó, amivel jelzi, hogy vége a beadott karaktersorozatnak).Ezután van egy for ciklusod, amivel ki szeretnéd íratni tomb1-et, de a másolás nincs meg.
Valami ilyesminek kellene szerepelnie a for cikluson belül, persze ha már a többi része jó:
for(i=0;i<strlen(tomb1) && i<strlen(tomb2); i++) /* csak hogy ne indexeljen túl, ha esetleg a tomb1 kisebb méretű tomb2-nél, persze ennek ellenőrzésére más megoldás is van */
{
if(tomb2[i] != '\t' || tomb2[i] != ' ') /* ha nem tabulátor és nem szóköz */
tomb1[i]=tomb2[i];
}
A ciklus végén zárd le lezáró 0-val a tomb1-et.Ezenkívül ennek az egésznek szerintem külön függvényben kellene lennie, ami két karaktertömböt kap paraméterként, visszatérési értéke pedig az átmásolt karakterek száma. A feladat legalábbis ezt mondja...
"Igaz a feladat nem írja, hogy töltsem fel a karakter tömböt"
És akkor mégis mit akarnál átmásolni, ha nincs feltöltve?system ("PAUSE");
Ezt felejtsd el! Nem platformfüggetlen, felesleges rendszerhívás.
Használd helyette pl. a getchar()-t... -
Sk8erPeter
nagyúr
Hát bocs, hogy a lelkedbe gázoltam ezzel.
Biztos Poppe rakás szar órái után nagy volt a kontraszt, hogy nem egy olyan ember beszél, aki még az őskorban tanult programozni. Ja, és szegény Pohl Laci előadásaival hasonlítsd már össze Szebiét...
Amúgy szerintem tényleg jók voltak az előadásai, ízlések és pofonok, ha figyeltem, mindent értettem, és meg is maradt. Akkor szerintem nagy gáz nem lehet vele.
Azt nem tudom, szakirányon milyen órákat tart. -
Sk8erPeter
nagyúr
válasz
Gyuri16 #1977 üzenetére
Alapvetően szerintem mindannyian egyetértünk.
A legjobb egyébként az, ha az ember rengeteget gyakorol egyedül.
Én pl. C++-t prog2-ből akkor kezdtem el megérteni, amikor készítettem a szoftver laborból feladott házimat, amivel extra sokat szarakodtam, hogy a lehető legszebb legyen, szerencsére az ellenőrzésnél a laborvezető srácnak nagyon tetszett a megoldásom, azt mondta, ennél szebben nem igazán lehetett volna megoldani.
Az előadás, a gyakorlatok és a labor is önmagában kevés lett volna, mert tök más, amikor valaki elmagyarázza, hogy mit kell csinálni, és mivel lehet szopni, mintha te magad szívsz annyit egy feladattal, hogy attól már önmagában a fejedbe verődik a megoldás módja.
De ezt nálunk az előadó hangsúlyozta is, hogy rengeteget gyakoroljunk, különben nem fog menni, hiába járunk be szorgalmasan előadásokra.A tárgyra visszatérve a lényeg egyébként az, hogy a papíron programozáshoz felesleges foglalkozni az include-olásokkal és a csodás hibaüzenetekkel - nálunk pl. prog2-n kifejezetten kihangsúlyozta az előadó, hogy ne szarakodjunk a ZH-n az include-olgatásokkal meg a using namespace-ekkel, mert azt úgysem fogják értékelni, senkit sem érdekel, hogy oda tudok írni minden program elejére két-három mindenképp szükséges sort.
(#1976) Karma: pedig szerintem Szebi előadásai eléggé gyakorlatiasak és érthetőek voltak, nekem kifejezetten tetszettek az órái meg a stílusa. Az volt az egyetlen olyan előadássorozat ebben a félévben (a gyakorlatokon, laborokon kívül), aminél minden órán ott voltam, mert tényleg érdekelt, és követhetőnek tartottam. Sok olyan előadás volt, amire egyszerűen sajnáltam az időt. Viszont Szebinél elég sokat tanultam, főleg az jött be, hogy nem teljesen elszállt idióta programokat vettünk, hanem gyakorlatban is bármikor előforduló programrészleteket beszéltünk meg (az elméleti anyagon túl), hogy mit miért, hogyan kell csinálni.
Azon jót szakadtam, amikor mondta: "a szünet előtt csak egyetlen nagy kérdést szeretnék Önöknek feltenni. Megtalálja-e az egér a sajtot?".(ennek az ea-nak a végefelé - backtrack algoritmusok)
Egyébként nekem egyetem előtt közöm nem volt a programozáshoz, mégis itt szedtem össze a tudás nagy részét, persze tudom, hogy még mindig nem tudok semmit az egészről. Persze az sokat segített, hogy rengeteget gyakoroltam magamtól, meg weblapfejlesztés közben is elég sok programozási kérdés merül fel más nyelveknél, így abból is lehet építkezni. -
Sk8erPeter
nagyúr
válasz
Gyuri16 #1974 üzenetére
Ez is lehet szempont, nálunk prog1-en nyilván ugyanúgy le kellett ellenőrizni a hibaeseteket, és hibaüzeneteket dobni, de közel sem ezen volt a hangsúly, hanem magán a feladatmegoldáson. Ha valaki a programozás során a fordító hibaüzeneteiből nem jön rá, hogy azért nem megy a program, mert valamit nem include-olt, akkor az ne akarjon programozással foglalkozni, ne legyen informatikus.
Fontos az ilyen jellegű alapok lefektetése is - pl. laboron. DE a prog általában inkább arról szól, hogy mennyire tudsz papíron programozni. És többnyire informatikus szakokon van elméleti és gyakorlati (labor) rész is... Ott meg megtaníthatják az include-olást és egyéb ehhez hasonló dolgokat, amik nélkül a programod egyébként sem menne. De amikor papíron kell programozni, és szorít az idő, akkor ne arra menjen már el az idő fele, hogy minden szirszart include-olgatsz, meg csodaszép hosszú hibaüzeneteket írsz, hanem maradjon idő inkább a tényleges feladat elegáns megoldására, a hibaüzenetekkel meg include-olásokkal majd elszarakodsz akkor, amikor írogatod a programot. Persze nyilván így is derüljön ki a hibaüzenetből, hogy mi a pálya, hol akadt el a program.
Ha meg a srác által írandó program egyébként is gyakorlati jellegű, tehát gépnél kell megoldani, akkor meg nyilvánvaló, hogy mindent include-olni kell, és akkor nincs miről beszélni... -
Sk8erPeter
nagyúr
Jaja, valóban, közben rájöttem, hogy az a void nagyon sántít.
Egyébként szerintem az egész feladat nagyon komolytalan, sokkal több figyelmet fordítanak arra, hogy egy hibaüzenet elég részletes legyen, meg hogy minden #include-olva legyen, mint magára a feladatra és annak elegáns megoldására...
Nálunk papíron kell tudni programozni, és speciel az a legkevésbé lényeges rész a feladat megoldásánál, hogy milyen hibaüzenetet dobunk, csak legyen nyilván lekezelve a hiba, meg az sem fontos, hogy include-oljuk a megfelelő fejléceket, nyilván azt a feladat tényleges megvalósítása során nem hagyod ki, de amikor egy feladat részletes elméleti megoldásáról van szó, akkor szerintem ez a legkevésbé lényeges rész. -
Sk8erPeter
nagyúr
"Ez a void atalakit(char[] nev) szignatúra meg üt."
Nem is char[] nev, mert char nev[]Amúgy jobban mutatna char* nev formában, nem? Vagy még mire gondolsz?
Mellesleg nem értem, ha az egész karaktersorozatot át kellene adni a függvénynek átalakítás céljából, akkor azt hogyan akarod megcsinálni anélkül, hogy el ne lenne tárolva? És ne tekintsünk el a +1-es alfeladattól, az is a specifikáció része...
(Bár elég komolytalan specifikáció, az egész megfogalmazás valahogy elég bénácska számomra...)
Pl. hogyan akarod kicserélni a catherine_zeta-jones formájú szöveget Zeta-Jones, Catherine formájúra, ha nem tárolod el a karaktersorozatokat? -
Sk8erPeter
nagyúr
válasz
cellpeti #1967 üzenetére
Ha nincs eltárolva a karaktersorozat, akkor hogy akarod később átalakítani?
Mindegy, milyen adatfolyamból olvasol (pl. fájlból, standard inputról), a későbbi átalakításhoz, kiíratáshoz mindenképp el kell tárolnod... Miért, eddig hogy képzelted, egyből kiíratod, vagy mi? Akkor a feladatokat nem fogod tudni megcsinálni... -
Sk8erPeter
nagyúr
válasz
cellpeti #1965 üzenetére
Miért akarod kicserélgetni a whitespace-eket? Akkor eleve félreértetted a feladatot, az a feladat, hogy az alsóvonásokat cseréld szóközökre, és amentén válaszd el a neveket, sőt, eleve a bevitt karaktersorozat nem tartalmazhat whitespace-t, csupán "aláhúzásjelet", ha mégis tartalmaz, akkor hibaüzenetet kell dobni!
Simán megcsinálhatod azt is, hogy karakterenként ellenőrzöd, tárolgatod, és ha valahol hibát találsz, akkor befejezed, hibaüzenetet dobsz, egyébként meg átalakítgatsz. -
Sk8erPeter
nagyúr
válasz
macikos #1894 üzenetére
A TurboC-t felejtsd el. Ha erőforráskímélő fejlesztőkörnyezetet akarsz, akkor ott van többek közt a Code::Blocks.
Kérdésre: [link] (akár első találat...)
(egyébként komolyan nem értem, ha a maximumkeresés megy, akkor mi a gondod a minimumkereséssel?)
Amúgy meglep, hogy ME-en ilyen szarul tanítják a programozást.
-
Sk8erPeter
nagyúr
válasz
macikos #1890 üzenetére
Most komolyan, Te milyen fordítót használsz, amiben ez működik, és ami nem pampog azért, hogy tele van hibákkal?
Meg sem próbáltam megérteni a programodat, mert annyi időm nincs, de a következő pl. micsoda?
typedef int bool;
?Felül akarod definiálni a bool típust, vagy mi? Ennek semmi értelme.
Ezenkívül a main()-nek nincs vége sehol, plusz ott a legvégén van egy else ágad, ami után van egy felesleges kapcsos zárójeled.
A void main()-hez NE szokj hozzá, int main() a szabványos, és a programod térjen vissza 0-val, ha sikeresen lefutott. Lehet itt magyarázkodni, hogy dehát egyes fordítók elfogadják, stb., de akkor sem helyes.
Ezenkívül ismét van két for ciklusod, amiben i nincs deklarálva int-ként (127. és 157. sor a pastebin-en).
Az meg a legrosszabb, hogy nincs semmiféle hibakezelésed (pl. amennyiben a bemeneti adatok helytelenek, akkor írjon ki hibaüzenetet, majd kérje be újra az adatot, és ehhez hasonlók), ahogy már Jester01 is írta.
Amúgy most kipróbáltam, és felvittem egy karóra meg egy falióra adatait (mellesleg a mutatók számához (amit bekérsz) beírhatok nyugodtan akár 532-t is, azt is elfogadja...), és a végén azt írta ki, hogy nincs a nyilvántartásban óra...
(ergo nem működik)
Mellesleg elég érdekesnek tartom, ha Ti C-t tanultatok, és vegyítettétek a tananyagot az objektum-orientált programozás C++-os elveivel...
És ezek szerint a tanár hülyeségeket (csupa nem szabványos dolgot) oktatott nektek. Gáz.
-
Sk8erPeter
nagyúr
válasz
Jester01 #1885 üzenetére
No de ezt miért nekem mondod?
Én mondjuk ilyen szinten meg se néztem, mert kb. 1 perc nézegetés után feladtam, annyira rosszul volt indentálva. Igaz, az utána lévő eredmény is elég fos, mert igazad van, totális keverék az egész, azokkal a hibákkal, amiket leírtál.
Még ettől a getch-tól van hányingerem. -
Sk8erPeter
nagyúr
válasz
macikos #1882 üzenetére
És ez hol C? Ez C++.
Nem tudnád feltenni valami normális szintaktika-kiemelős helyre, ahol nem megy szarrá a tördelés? Ez így teljes mértékben átláthatatlan. Pl. pastebin.com
Mellesleg a for ciklusoknál rendszeresen lehagyod az i deklarációját (int i=0; helyett sima i=0;-t írsz, míg a korábbi int i változók csak a cikluson belül élnek)
ezenkívül a clrscr(); nem minden fordítónál működik, helyette működhet pl. a system("CLS");.
Olyan nincs, hogy iostream.h, helyette:
#include <iostream>
Nincs kiterjesztés!
Ezek csak az elsőre feltűnő hibák, de jó lenne, ha felpakolnád áttekinthető, indentált formában, mert ez így nagyon gáz. -
Sk8erPeter
nagyúr
A pow-hoz include-old a math.h-t is! Tehát az alábbi sort még pakold bele:
#include <math.h>(#1853): a for ciklusból nemcsak break-kel lehet kilépni, hanem úgy is, ha teljesül a feltétel, ami miatt a ciklus megszakad.
Pl.
for(i=0; i<n || valami_mas==vege_feltetel; i++)
/* ... */
Persze nemcsak vagy-olhatod (||) hanem és-elheted (&&) [szép magyar szavakkal élve] is egy másik feltétellel.
-
Sk8erPeter
nagyúr
válasz
Gyuri16 #1824 üzenetére
Hű, na most ez így már tényleg bonyolultabbnak hangzik, mint elsőre gondoltam...de majd végiggondolom. Szerintem holnap megpróbálom megcsinálni, ma már nincs agyam hozzá.
Csak azért gondoltam viszonylag egyszerűnek, mert nem egy általános jellegű regexp ellenőrzőt szeretnék készíteni, hanem csupán a feladatnak megfelelőt. De meglátjuk, lehet, hogy sok cumi lesz vele...
Ja, egyébként köszi az ötleteket, majd utánanézek az általad írt dolgoknak.
Formális nyelvek már nincs BSc-n.(#1823) harry: szintén zenész?
Nem is tudtam, hogy Te is ugyanoda jársz.
-
Sk8erPeter
nagyúr
-
Sk8erPeter
nagyúr
Akkor lődd le a poént, légyszi!
Írd le nagyvonalakban, kíváncsi vagyok!
Én viszonylag egyszerű megoldásra gondoltam, hogy ellenőrizgetem, hogy megfelel-e a reguláris kifejezéseknek, semmiféle "determinisztikus állapotautomatára" nem gondoltam, főleg, hogy egyelőre azt se tudom, mi az (legalábbis - tudtommal- még eddig egy tárgyból se vettük).
-
Sk8erPeter
nagyúr
Igen!
Mondjuk az ezután lévő feladat már kicsit komplikáltabb, ehhez már tényleg kell állapotgép, az meg tökölősMondjuk leginkább akkor tökölős, ha ilyen tök általános jellegű regexp felismerőt szeretnék írni, mert akkor nem elég csak azzal foglalkozni, ami a konkrét feladat, de azt hiszem, az általános célút majd inkább máskor.
"Írjon C programot, amely a standard inputon érkező szöveg sorait
megszámolja, és megszámolja azokat a sorokat is amelyekre az alábbi
(ld. 4. feladat) reguláris kifejezes illeszkedik:^[^#]_*(0x)*[0-9]+W6.*[a-z]+.+qqriq(A|a)
A program az eredményt két oktális számként írja ki a standard outputra!
A két számot / jellel válassza el, és a sort sorvégjellel zárja le pl:
123/71A fenti reguláris kifejést Önnek kell értelmeznie és nem kell értelmező
programot készítenie hozzá! Pl. a [A-Z]+ kifejezéshez olyan állapotgépet
kell készítenie, ami felismeri a nagybetűkből álló sorozatot." -
Sk8erPeter
nagyúr
Köszi, teljesen tiszta.
Így nem túl nehéz generálni megfelelő adatfolyamot...
Pl.:
#include <stdio.h>
int main()
{
int i;
for(i=0;i<181;i++)
printf("Kiirok valamit\n");
printf("a__0x0x56W6AafqqriqA\n");
printf("a__0x56W6AafqqriqA\n");
printf("a_0x0x6W6Aafqqriqa\n");
return(0);
}Ennyi, működik.
------------------
(#1800) -Zeratul-:
"bme prog alap 1?"
Ez már prog 2.Amúgy vicces kissé, hogy prog 2-t, ami elvileg színtiszta C++, úgy kezdjük, hogy 3 gyakorlat és 3 szoftlab csak sima C-ről szól.
Első szoftlabon kábé azt vettük át megint, hogy mi az a printf(), azt hittem, eldobom az agyam...
De szerencsére csak egy egyperces novella volt.
Ja, az állapotgépes feladatnak most kezdek hozzá, elsőre nem tűnik olyan egyszerű feladatnak... (bár gondolom nem is kell belehalni) -
Sk8erPeter
nagyúr
Hali!
Van egy program, amiben egy reguláris kifejezés helyes értelmezésével akadtak problémáim, leírom a feladatot (benne a regexpet), aztán ahogy értelmeztem, légyszi javítsatok ki, hogy jó-e..."Írjon C programot, amely a szabványos kimenetre kiír egy olyan 184 sor hosszú szöveget, amelyben pontosan 3 olyan egymástól különböző sor van, amelyre az alábbi reguláris kifejezés illeszkedik:
^[^#]_*(0x)*[0-9]+W6.*[a-z]+.+qqriq(A|a)
(Az utolsó sor végén is legyen \n karakter!)"
^ : Sor elején fordul elő a minta
[^#] : bármilyen karakter, ami nem #
_* : alsóvonás karakter után tetszőleges számú, bármilyen karakter
(0x) :
* : utána tetszőleges számú, bármilyen karakter
[0-9]+ : szám, mely legalább egyszer szerepel
W6 : W6 ...
. : egy db tetsz. kar.
* : tetszőleges számú, bármilyen karakter
[a-z]+ : a-z tartományból legalább egy betű
.+ : tetsz. kar. legalább egyszer (van ennek értelme?)
qqriq : qqriq...
(A|a) : 'A' vagy 'a' betű szerepel utánaEgy-két helyen nem ment az értelmezés.
Ezenkívül azzal van a gondom, hogy most automatikusan hogyan generáljak egy ilyen szöveget? Mert manuálisan is bevihetnék egy ilyen szöveget, amire ez illeszkedik, de lehet, hogy nem az a feladat lényege (ez nem derül ki világosan számomra)...Előre is köszi a segítséget!
-
Sk8erPeter
nagyúr
Jahh, rájöttem utólag, hogy azt is odaírtam, csak azt utólag találtam és biggyesztettem oda, az a mondat meg figyelmetlenségből benne maradt.
Bocsi.
Csak gondoltam megkérdezem, jöhetnek-e ide is C++-kérdések, mert itt viszonylag sokan mozgolódnak. De akkor majd áthúzom a belem oda. -
Sk8erPeter
nagyúr
Hali!
Csak általános jellegű kérdés, ezért is teszem OFF-ba:
ide végül is jöhetnek C++-os kérdések (aktuális félév tananyaga), vagy azzal húzzak majd át a Programozás fórum vagy C++ gyors segitseg kellene topicba?
Külön C++ topicot nem találtam. -
Sk8erPeter
nagyúr
Komolyan nem értem. Miért jön elő neked a Disassemble?
Nem ezzel szoktam fordítani, de most gyorsan kipróbáltam a Visual C++ 2008 Express Edition-t, és itt egy pár kép róla (innen másoltam ki egy full egyszerű kódrészletet), hogyan lehet debuggolni, és watch-olni a különböző változók értékének változását; bekarikáztam pirossal a legfontosabb részeket:
1.) elhelyezgethetsz annyi breakpointot, amennyit csak akarsz (a sorok számánál mondjuk nem többet) (klikk a sorok számozásánál, megjelenik a piros pötty), aztán Start Debugging: [KÉP1]
2.) kijelölöd, amit figyelni szeretnél, aztán jobb klikk, Add watch: [KÉP2], ekkor bal oldalt alul látható, hogy megjelenik egy Watch ablak, na itt lehet figyelgetni a változók értékeit, ahogy adott esetben értéket kapnak, cserélődnek, "memóriaszemét" van benne, stb.
3.) Continue-val nyomogathatod addig, amíg breakpointjaid vannak, vagy egyéb (véget ér a program, vagy beavatkozást igényel, stb.), és megszakíthatod a Stop Debugginggal: [KÉP3]Így már tiszta?
-
Sk8erPeter
nagyúr
Dehát ez C++...
(#1749) Dealer: konkrétan mi a problémád vele? Nekem VS alatt teljesen kézenfekvő volt a debuggolás, mert nem kellett külön telepíteni hozzá debuggert, és beállítgatni, CodeBlocks-hoz kellett (mondjuk az se volt bonyolult). Jól láthatóan elkülönítve rakták be a saját menüjébe, ott van a Watch ablak, stb. Amúgy biztos a saját helpjében is benne van... De ha konkrétabban kérdezed, akkor biztos itt meg tudják mondani a választ.
-
Sk8erPeter
nagyúr
válasz
Gyuri16 #1669 üzenetére
Ebben teljesen igazad van, függvénynek nem I/O művelet a dolga, csakis annak elvégzése, amiért meghívták. A főprogram írogasson ki. Tehát ilyen egyetértek veled, de ha kicsit több energiát fektettem volna a dologba, akkor biztos feltűnt volna.
(#1668) shev7: OK, igaz, végül is nekem is jó, ha szóltok, hogy valahol lehetett volna jobban. Csak azt hittem, most jön a saváradat, ami miatt aztán szégyellhetem a pofám, hogy hogy írhattam ilyen sz@rt.
Amúgy igazatok van abban, amiket írtatok.
Mondjuk azt bírom, hogy a srác, aki annyit kérdezősködött, és akinek megírtam, még csak annyit se mondott, hogy "kösz vaze"...Így próbáljon segíteni az ember másnak. Vagy csak én vagyok a maradi, hogy meg szoktam köszönni, ha segítenek nekem?
-
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
Pedig direkt sokat kommenteztem, azt hittem, attól lesz egyértelmű.
De akkor nem. De mondjuk nem tudom, minek mentegetőzzek, mondtam, hogy nem a legtökéletesebb program, de elég gyorsan írtam, így nem foglalkoztam olyanokkal, mint a "függvény neve", "van-e felesleges változó, és ki lehet-e váltani valamivel, minimalizálni a kódot"... Már kezdem bánni, hogy megcsináltam a programot a srác helyett...
-
Sk8erPeter
nagyúr
válasz
Gyuri16 #1659 üzenetére
A névvel kapcsolatban igazad van, dehát a feladat megvalósítása szempontjából kb. az volt az, amit a legjobban lesz@rtam.
Amúgy sem gondolkodtam olyan túl sokat a feladat megoldásán, nem épp ezen kell leakadni.
"viszont foloslegesen mesz vegig az osszes oszton"
Már miért mennék végig az összes osztón?
A for ciklusból szerintem nem vettél észre egy részletet:
(i<max && divider<2)
(A zárójelezés szándékos, bár nem lenne kötelező, hogy jobban látható legyen, hogy összetartozik.)
Tehát eleve ha már divider mondjuk elérte a 2-t, akkor nem is fut tovább a ciklus.
Azért nem tértem vissza egyből már a for ciklusból, mert utána lehet, hogy akar további műveleteket végezni, vagy mittudomén, kiírni valami üzenetet, akkor legyen szabadon bővíthető, könnyebben átalakítható. Legfeljebb abban az esetben csak kiírja, hogy prím vagy sem, aztán végzi tovább a dolgát, ahogy akarja.
Ezek fényében nem nagyon értem a kritikát. -
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.
-
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. -
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
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Argos: Szeretem az ecetfát
- Linux kezdőknek
- Könyvajánló
- Bambu Lab 3D nyomtatók
- Apple iPhone 16 Pro - rutinvizsga
- TCL LCD és LED TV-k
- RAM topik
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- sziku69: Fűzzük össze a szavakat :)
- Vicces képek
- További aktív témák...
- DDR5 GAMER PC: Új RYZEN 7 8700F +RTX 4060/5060/4070/5070 +16-32GB DDR5! GAR/SZÁMLA! 50 FÉLE HÁZ!
- Dell Latitude 7410 Strapabíró Ütésálló Profi Ultrabook 14" -80% i7-10610U 16/512 FHD
- Szép! HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 32/512 Iris Xe FHD Magyar
- HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 8/512 Iris Xe FHD Magyar
- 512 Gb-os NVME-k
- Huawei P20 Lite 64GB, Kártyafüggetlen, 1 Év Garanciával
- AKCIÓ! ASUS B460M i7 10700 16GB DDR4 512GB SSD GTX 1080Ti 11GB KOLINK Observatory TG TT 600W
- Samsung Galaxy A41 64GB Kártyafüggetlen, 1Év Garanciával
- ÁRGARANCIA! Épített KomPhone i9 14900KF 64GB RAM RTX 5090 32GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! iPhone 12 Mini/iPhone 12/iPhone 12 Pro/iPhone 12 Pro Max
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: PC Trade Systems Kft.
Város: Szeged