Fontos linkek a C-ről:
Prog.hu-s cikkek
Prog.hu-s tudástár témák
The C Library Reference Guide
Standard C
Wikipedia
C Tutorial
Programming in C
Bevezetés a C programozási nyelvbe
Gyorskeresés
Legfrissebb anyagok
- Bemutató Spyra: akkus, nagynyomású, automata vízipuska
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
Általános témák
LOGOUT.hu témák
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] eBay-es kütyük kis pénzért
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] PLEX: multimédia az egész lakásban
- [Re:] [Szevam:] Érzelmi magabiztosság/biztonság - miért megyünk sokan külföldre valójában?
- [Re:] [Mr Dini:] Ha szeretnéd rootolni az LG Smart TV-d, tedd meg most!
- [Re:] Gurulunk, WAZE?!
- [Re:] [attilasd:] A laposföld elmebaj: Vissza a jövőbe!
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Téma összefoglaló
- Utoljára frissítve: 2014-04-25 14:12:00
LOGOUT.hu
Hozzászólások
sghc_toma
senior tag
ez nem hatvanyozas, csak 2^n-re tudod hasznalni.. a << bitenkenti eltolas balra, ami gyakorlatilag 2-vel szorzast jelent.. ezert ha az 1-et eltolod n-nel, n-szer szorzod az 1-et 2-vel, azaz 2^n-t kapsz eredmenykent..
in asm we trust
vamzi
őstag
hú, de láma kérdés volt, a shiftelés eszembe se jutott
a pow helyett viszont nincs valami más utasítás? nem mintha szükségem lenne rá, csak írtátok, hogy nem túl jó ennyiszer meghívogatni.
vamzi
őstag
Egyelőre jegelve a korábbi feladat, majd kitudom, hogy más hogyan oldotta meg a tipusokat.
Viszont lenne egy kérdésem:
a for ciklusból ki lehet lépni a vége előtt? Van rá valami parancs? Esetleg olyan, amit a c90-es szabvány is támogat?
Azt akarom megoldani, hogy van egy előre meghatározott halmazom csökkenő sorrendben és egyesével addig vizsgálom őket, míg a végére érek, vagy az első egyezést meg nem találom, onnantól véget kellene vetni a ciklusnak. Ezt én forral szeretném megoldani, bár rekurzívan valószínüleg könnyebb dolgom lenne, de sajnos nem nagyon értem a rekurzív dolgokat, pedig ülök és figyelek órán, könyvet is bogarászom, de valamiért nem akar átjönni a logikája.
Karma
félisten
A parancs amit keresel: break.
“All nothings are not equal.”
vamzi
őstag
kipróbálom, de az nem csak a switch - case-ben működik? bár felesleges kérdeznem, mert úgy is kipróbálom
köszi.
Karma
félisten
Nem, ciklusokban (do, while, for) is működik, kilép a blokkból.
De ha már itt tartunk, van continue is, ami eggyel tovább lépteti a ciklust.
“All nothings are not equal.”
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
vamzi
őstag
Köszönöm, a választ, azóta már be inklúdoltam a math.h-t. Viszont a feltétel megadása új volt, vagy is még nem gondoltam rá, de tetszik. Viszont egyelőre marad a break.
Sk8erPeter
nagyúr
Nincs mit, amúgy így utólag megnézve a példát, inkább valami ilyesmi életszerűbb:
for(i=0; valami_mas!=vege_feltetel && i<n; i++){
/* ... */
}
Ez olyan, mintha azt írnád, hogy
i=0;
while(valami_mas!=vege_feltetel && i<n){
/* ... */
i++;
}
Sk8erPeter
vamzi
őstag
Na, itt egy újabb hülye kérdés.
Van nekem egy tömböm tele int-tel. Hogyan tudnám átadni a tömb elemeit egyesével 1-1 char-nak? A lényeg, hogy a beolvasott int egy 6 jegyű számsorozat és azt szeretném adatbázisból visszakeresni és számjegyekre visszabontani a switch - case ciklusomnak. A feladat maga csak annyi lenne egyébként, hogy nagyon sok számsorozatot olvasunk be és meg kell számolni, hogy melyik számjegyből mennyi van, plusz egy két apróbb dolog van még benne. Nem azért írtam le, mi a feladat, hogy megoldjátok nekem, csak hogy tudjátok miről van szó. Engem csak a típus konverzió érdekelne, hogy hogyan is csináljak intből chart és vica versa
Karma
félisten
A char egy -128-tól 127-ig terjedő egész szám, csak véletlen, hogy a karaktereket is ezzel írja le a paraszt a C nyelvben. Mivel belül nem tizes számrendszerben tárolja a rendszer a számokat, de még csak nem is BCD-ben, Neked kell kézzel kiszámolnod az egyes helyiértékeket. A tizes maradékos osztás csodákra képes
“All nothings are not equal.”
vamzi
őstag
igen, az a b tervem, de nem akarom használni úgy viszont még lehet esélyem, hogy ha eleve sztringekkel töltöm fel a tömböm. Köszi a választ
eziskamu
addikt
Ha mindig hat számjegyű a szám nincs gond. Példa
az egyik "számsorod" a t= 654321
(a % a maradékos osztás, a lényeg, hogy az osztás maradékával jön vissza, most látom Karma is ezt ajánlotta, de tényleg nem nehéz, csak próbálgasd és jó lesz )
1 egyenlő lesz t(i)%10 -el
2 egyenlő lesz (t(i)%100 - t(i)%10)/10
3 egyenlő lesz (t(i)%1000 - t(i)%100 - t(i)%10)/100
és így tovább.
Mivel int-ekről van szó ezért lehet, hogy el is hagyhatjuk a kivonásokat, mert asszem nem kerekít a C osztáskor, csak simán levágja a tizedespont utánni cuccokat
[ Szerkesztve ]
vamzi
őstag
köszönöm. ez a rutin meg is van már valahol egy korábbi példafeladat miatt. lehet tényleg egyszerűbb lenne így. egyébként végignéztem a teszteseteket és 6 számjegy volt a maximum.
Korcsii
őstag
ejj, ezek a fránya char-ok...
short int x,y;
printf("Kezdő koordináta: ");
scanf("(%d,%d)",&x,&y);
printf("%d %d",x,y);
ez működik is, de az x,y max 100 lehet, így jobb lenne a(z unsigned) char... ha csak az elsőt adom meg, akkor azt megjegyzi, kiírja, a második valami random lesz... de ha mind a kettőt megadom, az elsőt elfelejti (0 lesz)...
van erre valami egyszerű és szép megoldás, vagy inkább ne sajnáljam azt a plusz 1 (?) byte-ot?
[ Szerkesztve ]
Karma
félisten
Teljesen felesleges azzal az 1 bájttal szívni, meg nekem úgy tűnik a referenciából, hogy számot charba olvasni nem tudsz. A %hd-vel csak short intbe olvashatsz, de a %c az ténylegesen egy karaktert olvassa be.
“All nothings are not equal.”
Stefa0009
csendes tag
Sziasztok!
Szeretnék írni c-ben amely kiírja két dátum között eltelt
időt a felhasználó által választott mértékben. Az első paramétere egy kapcsoló
(‐ev, ‐honap, ‐nap, ( , p, p, ‐ora, ‐perc, ‐masodperc), második és harmadik paramétere (YYYY‐MM‐DD alakban) dátumok. Hibás dátum esetén hibát írjon ki. Tudna valaki ebben segíteni?
Előre is köszi
doc
nagyúr
most akkor C kell vagy shell script?
Stefa0009
csendes tag
Inkább Shell script de ha valaki tudna cben segíteni az is jó lenne
Jester01
veterán
c-ben mktime aztán kivonod a time_t értékeket végül pedig visszaalakítod.
shell-ben a date programot hívhatod a time_t konverzióhoz, a visszaalakítás itt is triviális.
[ Szerkesztve ]
Jester
AlapVaj
csendes tag
Olyan problémám lenne, hogy hogyan kell megírni C-ben ezt:
A program két stinget kap szóközzel elválasztva.
Addig még megy is, hogy elkezdek beolvasni szóközig, de azután hogy folytatom a többi karakter tárolásának megkezdését. Net-en sajnos sehol nem találtam rá programot. Olyat ami két külön álló stringet olvas be. Esetleg valakinek nincs hasonló programja?
Gyuri16
senior tag
hogyan kapja meg a program a stringeket?
ha parancssori parameter (pl: program.exe alma korte) akkor az argv tombben lesznek a stringek (ez jo, mert a szokozoknel elvalasztja)
erre itt egy pelda:
[link]
ha beolvasni kell stdinrol, akkor a legtisztabb megoldas az, hogy beolvasod az egesz sort (getline, fgets), es aztan egy ciklussal vegigmesz rajta, es szetvagod a beolvasott stringet ketto masikba (itt vigyazni kell, hogy le legyen foglalva a hely, ahova a stringeket masolod)
kicsit "csunyabb" megoldas, hogy miutan beolvastad az egesz sort, ami ugy nez ki, hogy "szo1 szo2\0" akkor az ureshelyet lecsereled \0-ra, es egy *chart beallitasz a szo2 elejere (igy meglesz a ket stringed ket valtozoban, es nem kell masolgatni)
Nem vagyok egoista, csak uborkagyalu!
Adamka1999
csendes tag
Üdv!
Szeretnék kezelni nagyon nagy számokat, long double nem volt elég. Esetleg valami ötlet?
Karma
félisten
Adamka1999
csendes tag
Kösz, megnézem őket.
Korcsii
őstag
illik char-ral számlálni? vagy jobb a short int?
pl egy for cikluson belül, ahol az i mondjuk max 100 lehet...
Jester01
veterán
Miért is nem int-et használsz?
Ugye a legtöbb helyen automatikusan int-té konvertálódik minden. A short int-nek és társainak leginkább csak a helyigény miatt van létjogosultságuk, tipikusan még lassabbak is mint az int.
Jester
Korcsii
őstag
most kezdtem áttérni a short int-re, de igazad van, maradok az int-nél inkább...
klambi
addikt
megoldott feladatokat hol találok?
kellene néhány db...
[ Szerkesztve ]
"Mond szépen angolul: Gyors róka!"
vamzi
őstag
Sziasztok. Lenne számotokra egy láma kérdésem
Szóval ANSI-C-ben hogy tudom letárolni a sztringeket, ha nem tudom, hogy összesen mennyit fogok kapni, csak azt, hogy 80 karakternél egyik sem hosszabb?
A számokkal meg tudom oldani tömbbe, de ugye a sztring már eleve egy tömb. Vagy éppen emiatt egy 2 dimenziós tömböt kell alkalmaznom? De azt hogyan?
bpx
őstag
igen, 2 dimenziós tömb kell (char**, vagy char[][] nem dinamikusan)
macikos
addikt
Sziasztok!
Kellene egy gyors kis segítség. Megcsináltam egyik haveromnak a számtech beadandót, de mivel én már régen "C-ztem", így szintaktikailag nem lett a legtökéletesebb a progi és nem tudom lefordítani. Ránézne valaki, hogy mi a gond vele? Pár hiba van benne csak.
[ Szerkesztve ]
Sk8erPeter
nagyúr
É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
macikos
addikt
Jester01
veterán
Az egésznek egyetlen előnye van: tényleg elhiszik majd, hogy az az illető csinálta aki beadja ...
Ez C és C++ keveréke, globális változókkal, gets használatával, puffer túlcsordulással, boolean kifejezések helyett egymásba ágyazott feltételekkel, string-int keveredéssel, értelmetlen cast-olással, logikai hibákkal, abszolút hibakezelés nélkül és még a saját függvényeit is rosszul használja.
Azt, hogy az utolsó két for ciklus mit csinál nem is értem. Az első kikeresi a maximum árat (ami majdnem jó is lenne, ha nem a minimumot kellene) a másik ciklus pedig nem is tartalmaz a ciklusváltozótól függő kifejezést. Egyszerűen átteszi a talált maximum árat db1-ből db2-be. Utána pedig ezt az árat próbálja indexként használni ... ó jajj. Hogy ezek miért db nevű változók az már csak a hab a tortán.
Jester
Sk8erPeter
nagyúr
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
macikos
addikt
getch-val mi a baj? Nekünk ezt így tanították Nagyon idejétmúlt? Ez van
Jester01: Köszönöm, akkor egy "kicsit" átdolgozom a kódot
A poén az, hogy azért én csinálom meg haveromnak, mert nekem már megvan a C programozás, sőt 4-est kaptam belőle (Nem vagyok infós, nyugi )
[ Szerkesztve ]
macikos
addikt
Egyébként az isotream.h miért is nem jó? Megkerestem a saját beadandómat, ami hasonló feladat volt és az működik. Lehet azt átírom
Jester01
veterán
Mert a szabvány az #include <iostream>, továbbá using namespace std; ajánlott.
getch ugyancsak nem szabványos, ahol ezt tanítják ott baj van. Természetesen az egész conio.h nem szabványos, a képernyőtörlésre sincs sajnos szabványos megoldás. Ilyen beandadókban általában nincs is jelentősége, sokkal fontosabb (jobb helyeken) az, hogy szabványos kód legyen.
Jester
macikos
addikt
Átírtam a régi programomat, most így néz ki: [link]
Működik, szerintem jó is
Már csak a "legolcsóbb kvarc működési elvű, műanyagházas falióra ára"-nak kiiratása kellene.
Minimum keresés algoritmus hogy néz ki? Maximum keresés menne, de nem tudom miért, a minimumra nincs ötletem
Sk8erPeter
nagyúr
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
Karma
félisten
Ebben semmilyen objektumorientalt elv nem volt... Kivancsi lennek arra a tanarra, aki ilyet lehetove tesz. Asszem elzavarnam utcat soporni vagy arkot asni inkabb.
“All nothings are not equal.”
Sk8erPeter
nagyúr
Igaz, nem fogalmaztam pontosan.
Sk8erPeter
macikos
addikt
TurboC. Van ilyen? Na az megeszik mindent
Sajnos ez van, nekünk ezt tanították/tanítják. Miskolci Egyetem.
Mindegy, az elsődleges szempont most az, hogy ránézésre jó legyen, hogy haveromnak elfogadják.
minkeresés hogy néz ki?
doc
nagyúr
ha a maximum keresesbol nem tudsz minimumkeresest csinalni, akkor bocs hogy ilyet mondok, de nagyon nincs ott helyed...
a TurboC meg irtozatos, gyakorlatileg nincs egyetlen szabvanyos eleme sem, az ok amiert azt tanitjak sok helyen az, hogy ingyenes (na meg persze a 20 eve kemiatanarbol atkepzett oktatok ezt ismerik, es nem hajlandoat ujat tanulni)
Sk8erPeter
nagyúr
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.
[ Szerkesztve ]
Sk8erPeter
ArchElf
addikt
Eh... Miskolci Egyetem. Mi folyamatosan azt röhögtük (Kiegészítő Levelező Info szak), hogy megtanítanak 20 óra alatt C-ben, majd 20 óra alatt C++ ban programozni (első két félév), majd a harmadikban linux alá C-ben IPC-t kellett programozni (shared memory, szemaforok, signaling, stb.) Többen voltak nem infós előélettel az évfolyamban. A legtöbb ember úgy csináltatta meg a beadandót programozó ismerősével (vagy annak híjján pénzért)...
De hát mit várjon az ember, ha pénzért kap papírt (levelező oktatás). A tanárok sírnak, hogy szombat-vasárnap kell bejárni tanítani (mintha nekünk semmi dolgunk nem lett volna hétközben), persze a vizsgát egyesek képesek kedd reggel 8-ra kiírni...
Amúgy nekünk a DevC++ -t próbálták erőltetni, de ennyi óra mellett semmi értelme nem volt az egésznek.
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
Korcsii
őstag
pl csinálsz két változót: int melyik, mekkora;
A melyik megkapja az első elem sorszámát (i, azaz valószínűleg 0), a mekkora pedig az első elem értékét. Majd egy for ciklussal végignézed az összes többi elemnél, hogy az kisebb-e nála. Ha igen, akkor a melyik megkapja az i értékét, a mekkora meg az adott értéket. Végül a melyik alapján be tudod azonosítani, hogy melyikről van szó... persze ha csak egy adat van, akkor i helyett egyből lehet azt is tárolni... ha meg csak az ár kell, akkor a melyik el is hagyható...
(nem néztem a kódod, és eddig még csak C-ztem, C++ még a jövő zenéje)
[ Szerkesztve ]
ArchElf
addikt
Felmentésem volt, csak első órára mentem be az órájára (ha ugyanarról a tanárról van szó).
Egy 10 soros programot is meg tudott úgy írni, hogy elszálljon tőle a fordító. Háromszor játszotta el (program begépelés, fordítás, fordító elszáll) mentés nélkül - szánalmas volt.
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
macikos
addikt
"ha a maximum keresesbol nem tudsz minimumkeresest csinalni, akkor bocs hogy ilyet mondok, de nagyon nincs ott helyed..."
Tekintve, hogy Gépész vagyok és nem Infós, így ez valahogy nagyon nem tud érdekelni. Nem emlékezhetek mindenre.
Korcsii: Köszönöm. Tényleg pofon egyszerű volt Azt nem tudtam elképzelni, hogy mi alapján választom ki a kezdeti értéket, amihez hasonlítom a többit
ArchElf: Az egyik gyaktanáromon akkor sz*rtam be, amikor Visual C++-ben dolgoztunk. Én meg gyorsan csináltam egy olyan programot, hogy leraktam egy gombot és ha ráklikkeltél, akkor elmozdul valamerre x pixelt. Tanár meglátta, álla leesett és ezt mondta: ezt hogy csináltad??? Szóval ez van.
[ Szerkesztve ]
Téma tudnivalók
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!