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
- Retro Retro Kocka Kuckó 2024
- Bemutató Spyra: nagynyomású, akkus, 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
Általános témák
LOGOUT.hu témák
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [sziku69:] Szólánc.
- [Re:] Viber: ingyen telefonálás a mobilodon
- [Re:] [ubyegon2:] Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- [Re:] [btz:] Internet fejlesztés országosan!
- [Re:] Elektromos rásegítésű kerékpárok
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [bb0t:] Gyilkos szénhidrátok, avagy hogyan fogytam önsanyargatás nélkül 16 kg-ot
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
kispx
addikt
Jogos, egy gyors wikipedia keresés alapján mondtam
És még egy kiegészítés, nem x>500 hanem x>=500
(#3446) Bobrooney
A WinForms-nak nincs magyar nyelvű irodalma. De tudtommal már nem fejlesztik tovább.
(#3452) bandi0000
(#3447) sztanozs hozzászólásában szereplő számokat is tedd bele, mert a wikiből nem jól mondtam én sem. És vannak olyan számok pl I ami háromszor is előfordulhatnak, szóval azokat rakd bele egy ciklusba.
[ Szerkesztve ]
bandi0000
nagyúr
if(x>1000)
{
printf("M");
x=x-1000;
if (x > 500)
printf("DC");
x = x - 500;
if (x>400)
{
printf("CD");
x=x-400;
if (x>100)
{
printf("C");
x=x-100;
if (x>90)
{
printf("XC");
x=x-90;
if (x>50)
{
printf("LC");
x=x-50;
if (x>40)
{
printf("XL");
x=x-40;
if (x>10)
{
printf("X");
x=x-10;
if (x=9)
{
printf("IX");
x=x-9;
if (x>5)
{
printf("VL");
x=x-5;
if (x=4)
{
printf("IV");
x=x-4;
if (x>0)
{
printf("I");
x=x-0;
igy irtam igy gondoltad?
Xbox One: bandymnc
sztanozs
veterán
if helyett else if - vagy continue; minden if rész végére
Ez se túl szép:
if (x>0)
{
printf("I");
x=x-0;
}
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
sztanozs
veterán
Ja és a 900 sincs lekezelve... Ráadásul az >1000 már hosszabb szám, mint 3 számjegy...
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
bandi0000
nagyúr
if (x>400)
{
printf("CD");
x=x-400;
}
continue;
így gondoltad vagy ne zárjam le az if-et csak a végén az összeset?
mert ebben az esetben ezt irja: continue statement not within a loop
vagy netán kell ennek egy függvény?
Am bocs hogy ilyen értetlen vagyok de nem tanítják meg rendesen de elvárják hogy megcsináljuk amit pl elöbb leírtál hogy úgy irjam le nem láttam még olyat csak úgy tudom ahogy én csináltam sajnos...
[ Szerkesztve ]
Xbox One: bandymnc
kispx
addikt
Ezt írtad:
if(x>1000)
{
printf("M");
x=x-1000;
<----- ide kéne valami :)
if (x > 500)
printf("DC");
x = x - 500;
if(x>1000) <-- x >= 1000
{
printf("M");
x=x-1000;
} <-- ez kéne
if (x >= 500)
{
printf("DC");
x = x - 500;
}
continue; nem kell
[ Szerkesztve ]
sztanozs
veterán
De kell, nézd csak meg pl. a 737-et:
1. kör után: 121
DCXVI
2. kör után: 20
DCXVICXI
3. kör után: 0
DCXVICXIX
...
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
bandi0000
nagyúr
if(x>1000)
{
printf("M");
x=x-1000;
}
if(x>900)
{
printf("CM");
x=x-900;
}
if (x >= 500)
{
printf("DC");
x = x - 500;
}
if (x>400)
{
printf("CD");
x=x-400;
}
if (x>100)
{
printf("C");
x=x-100;
}
if (x>90)
{
printf("XC");
x=x-90;
}
if (x>50)
{
printf("LC");
x=x-50;
}
if (x>40)
{
printf("XL");
x=x-40;
}
if (x>10)
{
printf("X");
x=x-10;
}
if (x=9)
{
printf("IX");
x=x-9;
}
if (x>5)
{
printf("VL");
x=x-5;
}
if (x=4)
{
printf("IV");
x=x-4;
}
if (x>0)
{
printf("I");
}
hát így nem jó...vagy mindegyik if hez oda kéne irni az =-őt is?
Xbox One: bandymnc
sztanozs
veterán
mondjuk, ha minden töbször előforduló jel if-je helyére while-t raksz (1000, 100, 10, 1), és minden > helyére >=-t akkor jó lesz...
ja és a vége
while (x>0)
{
printf("I");
x = x - 1;
}
mod: Természetesen az...
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
kispx
addikt
Mindig is utáltam a római számokat.
Ez a honalp szerint a 737 az DCCXXXVII
bandi0000
nagyúr
while(x>1000)
{
printf("M");
x=x-1000;
}
if(x>900)
{
printf("CM");
x=x-900;
}
if (x >= 500)
{
printf("DC");
x = x - 500;
}
if (x>=400)
{
printf("CD");
x=x-400;
}
while (x>=100)
{
printf("C");
x=x-100;
}
if (x>=90)
{
printf("XC");
x=x-90;
}
if (x>=50)
{
printf("LC");
x=x-50;
}
if (x>=40)
{
printf("XL");
x=x-40;
}
while (x>=10)
{
printf("X");
x=x-10;
}
if (x=9)
{
printf("IX");
x=x-9;
}
if (x>=5)
{
printf("VL");
x=x-5;
}
if (x=4)
{
printf("IV");
x=x-4;
}
if (x>0)
{
printf("I");
x = x - 1;
igy se jó ha segít akkor fel tudom rakni az egész programot DEV C be csinálom
[ Szerkesztve ]
Xbox One: bandymnc
sztanozs
veterán
Mit ír ki több milliószor? 3 számjegyű számmal próbálkozol?
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
bandi0000
nagyúr
már nem irja ki már csak szimplán nem jót ír ki mert átírtam amit mondtál
Xbox One: bandymnc
kispx
addikt
if (x=9)
{
printf("IX");
x=x-9;
}
if (x>=5)
{
printf("VL");
x=x-5;
}
if (x=4)
{
printf("IV");
x=x-4;
}
Ez nem jó, mert a feltételben értékadás van. Egyenlőségvizsgálat kell.
[ Szerkesztve ]
bandi0000
nagyúr
tehát akkor mit kellene irni?
am meg még azt láttam hogy ha beírom h 566 akkor átmegy 500 ra jó a DC megy tovább 50 nél nagyobb a 66 igen és akkor beirja hogy LC holott a 60 LX
amúgy van még 1 fajta ezt oszttársam csinálta ez igy jó vagy hülyeség?
int main(){
int k=0,j,h,a,sz1=0,sz2=0,sz3=0,sza1=0,sza2=0,sza3=0,I=1,II=2,III=3,IV=4,V=5,IX=9,X=10,XL=40,L=50,XC=90,C=100,CD=400,D=500,CM=900,M=1000;
printf("Adj meg egy szamot 1 es 1000 kozott:");
scanf("%d",&a);
sz1=a/100;
sz2=(a-sz1*100)/10;
sz3=((a-sz1*100)-sz2*10)/1;
printf("A Megadott szam a:%d\n",a);
printf("sz1:%d\n",sz1);
printf("zs2:%d\n",sz2);
printf("sz3:%d\n",sz3);
for (k=0;k<sz1;k++) printf("C");
for (j=0;j<sz2;j++) printf("X");
for (h=0;h<sz3;h++) printf("I");
system("pause");
//getchar();
}
Xbox One: bandymnc
kispx
addikt
Értékadás =
Egyenlőségvizsgálat ==
Nem jó. Ha jól látom, akkor C X I karakterern kívűl semmit sem használ. A római számok pedig nem csak ennyiből állnak.
600-ra CCCCCC irna ki, de ilyen szám pedig nincs.
[ Szerkesztve ]
bandi0000
nagyúr
csak ha 2 = -őt rakok akkor azt irja h fölöslegesen van ott egyenlőség jel
már majdnem jó csak az 1 tizedesjegyesek nem jók pl:
[link]
Xbox One: bandymnc
kispx
addikt
if (x>=50)
{
printf("LC");
x=x-50;
}
Az 50 az csak L és nem LC
ugyanez 5-nél: VL helyett V
500 az D
[ Szerkesztve ]
bandi0000
nagyúr
az az hogy már kijavítottam már észre vettem én is de még mindig nem jó hiba
[ Szerkesztve ]
Xbox One: bandymnc
kispx
addikt
Na kerestem egy IDE-t a gépen. Elbeszéltünk egymás mellett
#include <stdio.h>
int main()
{
int x = 566;
printf("Szam = ");
scanf("%d", &x);
if(x>=1000)
{
printf("M");
x=x-1000;
}
while(x>900)
{
printf("CM");
x=x-900;
}
while (x >= 500)
{
printf("D");
x = x - 500;
}
while (x>=400)
{
printf("CD");
x=x-400;
}
while (x>=100)
{
printf("C");
x=x-100;
}
while (x>=90)
{
printf("XC");
x=x-90;
}
while (x>=50)
{
printf("L");
x=x-50;
}
while (x>=40)
{
printf("XL");
x=x-40;
}
while (x>=10)
{
printf("X");
x=x-10;
}
while (x>=9)
{
printf("IX");
x=x-9;
}
while (x>=5)
{
printf("V");
x=x-5;
}
while (x>=4)
{
printf("IV");
x=x-4;
}
while (x>0)
{
printf("I");
x = x - 1;
}
return 0;
}
Nekem ez a 660-at jól írja ki.
MÁS:
A Qt Creator miért nem ír ki semmit sem debugolás alatt? Ha terminálból futtatom csak akkor ír ki valamit ez a program.
bandi0000
nagyúr
így már elvileg jó
Köszönöm a sok segítséget és türelmet mindkettőtöknek.
Xbox One: bandymnc
bandi0000
nagyúr
ja és nem tudtok valami jó irományt amiből megtanulhatok jobban programozni C nyelven?
Xbox One: bandymnc
kispx
addikt
Én a Computerbooks: Programozzunk C nyelven című könyvből és a BRIAN W. KERNIGHAN – DENNIS M. RITCHIE: A C programozási nyelv könyvből tanultam.
bandi0000
nagyúr
majd akkor megnézem köszönöm
Xbox One: bandymnc
Bobrooney
senior tag
Amiket kispx ajánlott valóban jó könyvek, de ha nagyon most kezdted a dolgokat szerintem ez nyerőbb könyv lesz.
bandi0000
nagyúr
nem most kezdtem igazából elvileg már 3 éve programozok de mégse tanítanak eleget csak szerintem nagyon az alapokat C be
Xbox One: bandymnc
kingabo
őstag
Egy alternatív megoldás az eredeti 5letedet is felhasználva: csinálsz 3db 10 elemű tömböt feltöltöd őket, hogy a százasok, tízesek, egyesek helyére mit kell írni, ha a tömbindex + 1 az érték. Ezután a szétbontott számokat a fenti tömbökben indexként használva összefüzöd a római számot.
Bobrooney
senior tag
Hát igen, nálunk is ez a helyzet (SZE), akkor igen a másik két könyvel többre mész szerintem
Alapozónak meg amit írtam jobb, de ez neked akkor nem lényeges.
bandi0000
nagyúr
köszönöm bár már nem kell de ha akarsz segíteni van egy másik feladat aminek az a lényege hogy most bekérek egy legfeljebb 4 jegyű számot és azt átírja 2-es számrendszerbelibe
tehát pl beírok egy 10-est akkor ő kidobja hogy 1010
Van egy megoldási lehetőség a tegnapihoz hasonlóan hogy kiirom hogy ha 9000-8000-7000 stb mit kell kiirnia és ugyan úgy kivonom belőle, de biztos van egyszerűbb megoldás is mert ennek az a hibája hogy ki kéne számolnom hogy a 6000 pl hogy néz ki 2 es számrendszerben és igy tovább
a tanár azt mondta hogy bontsuk fel asszem hexadecimálisnak hívják amikor a kettes számrendszert felosztjuk 4-sével tehát: pl 011001010101 ez igy nézne ki : 0110|0101|0101|
és akkor az x számot felbontom számjegyekre és megvizsgálom hogy ha az 1-ő számjegy 9 akkor irja ki a kettes számrendszerbeli átváltását a 9-nek tehát akkor elsőnek kiirná hogy 1001 és akkor vizsgálja a 2.3.4. elemét a számnak de szerintem ez nem jó így
Xbox One: bandymnc
bandi0000
nagyúr
hát úgy néz ki akkor máshol is "túlfizetik" a tanárokat
Xbox One: bandymnc
kispx
addikt
Akkor kezdjük az elejétől.
"bekérek egy legfeljebb 4 jegyű számot"
A legnagyobb 4 jegyű szám 9999, ami binárisan 10011100001111 (14 karakter ha jól számolom). Tehát lefoglalsz egy 14 elemű karaktertömböt, ebbe rakod a végeredményt.
Az eljárás: (úgy mint papíron)
bekéred a számod (legyen x)
x-et elosztod kettővel. A maradékot (0 vagy 1-et beleírod a karaktertömbbe)
A hányadost megint elosztod kettővel és a maradékot megint beleírod a karaktertömbbe.
.
.
.
Egészen addig csinálod míg a hányados nulla nem lesz. Végül a karaktertömböt fordítva írod ki.
Tehát példával illusztrálva:
x = 5
5 / 2 == 2 (maradék 1)
2 / 2 == 1 (maradék 0)
1 / 2 == 0 (maradék 1)
101
[ Szerkesztve ]
sztanozs
veterán
Asszem valahogy így...
char[81] bin = "";
int counter = 1;
while (szam > 0 ) {
if (counter % 5 == 0) {
bin[80 - counter] = '|';
counter++;
}
bin[80 - counter] = '0' + (szam % 2);
szam = szam / 2;
counter++;
}
printf( bin[81 - counter] );
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
bandi0000
nagyúr
Érteni értem de azt hogy tudom leírni hogy maradék lett e vagy sem?
[ Szerkesztve ]
Xbox One: bandymnc
bandi0000
nagyúr
a tieddel csak annyi bajom van h ezt nem értem ilyet nem tanultam még sajnos
Xbox One: bandymnc
kispx
addikt
bandi0000
nagyúr
okés az már meg van hogy ha 1 a maradék akkor ir 1-et a tömbe ha meg 0-la akkor 0-át
de csak külön külön működik
ha a x%2 akkor maradél 1 de hova lesz vagy hogyan csináljam hogy akkor számoljjon tovább az x 2 vel elosztott értékével?
Xbox One: bandymnc
kispx
addikt
x%2 kifejezésnek van egy érteke. Ezt el kell menteni egy változóba Pl a tömbbe.
(az első hozzászólásomat módosítanám: karaktertömb helyett int-teket tartalmazó tömb is jó)
int t[14];
t[0] = x % 2;
x = x / 2;
t[1] = x % 2;
x = x / 2;
....
ezt kell egy ciklusba megcsinálnod.
bandi0000
nagyúr
while(a==0)
{
z=x%2;
if(z==1)
{
for(i=0;i<14;i++)
{
tmb[i]=1;
}
}
if(z==0)
{
for(i=0;i<14;i++)
{
tmb[i]=0;
}
}
if(x==0)
{
a=1;
}
}
én meg hirtelen ezt találtam ki ez hülyeség mi?
vagyis én ug ygondoltam hogy a while addig ismételje amig nem lesz az x=0, és akkor a while-ban átírja az a-t 1 re és elvileg meg szakad a ciklus nem?
[ Szerkesztve ]
Xbox One: bandymnc
bandi0000
nagyúr
nem tudtam már szerkeszteni tehát akkor igy csináltam meg de hibával leállt lefut csak hiba
main()
{
int a=0,tmb[15],x,i;
printf("Kerek egy szamot\n");
scanf("%d",&x);
while(a==0)
{
tmb=x%2;
x=x/2;
if(x=0)
{
a=1;
}
}
printf("%d",tmb(i));
system("pause");
}
Xbox One: bandymnc
kispx
addikt
if(x=0) // Megint értékadást írtál feltételként == kell
tmb=x%2; a tömböt indexelni kell Link
Hála, hogy a Win8 elcseszte a Linux partíciómat, azért nincs C fordítóm, ha majd lesz, akkor bővebben megnézem.
[ Szerkesztve ]
bandi0000
nagyúr
kijavítottam és ezt csinálja
tömbe 15 öt foglaltam le kijavítottam most de mindig ugyanez van
[ Szerkesztve ]
Xbox One: bandymnc
kispx
addikt
A tmb[0]...tmb[i-1]-ben vannak a maradékok, de a program a tmb[ i ]- ír ki.
A for ciklus nem kell bele. viszont majd a i változó értékét növeld lépésenként.
[ Szerkesztve ]
bandi0000
nagyúr
while(a==0)
{
tmb=x%2;
x=x/2;
i++;
if(x==0)
{
a=1;
}
}
printf("%d",tmb[i-1]);
system("pause");
}
igy gondoltad? nem jó én rontottam el biztos valahol de asszem elteszem holnapig biztos megvár
Xbox One: bandymnc
bandi0000
nagyúr
meg van kiirja a számot jó is csak 2 hiba van még az hogy fordítva irja ki pl 12 nél azt irja hogy 1100 és hogy a tömb 14 elemű és amit nem tölt bele azt random számmal egészíti ki
Xbox One: bandymnc
kispx
addikt
Első hsz-ben mondtam, hogy fordítva kell majd kiíratni.
Korcsii
őstag
És ugye minden változót kipucolunk használat előtt vagy inicializáláskor.
bandi0000
nagyúr
persze az volt a hibám hogy nem 0-ztam le de már meg van
hogy iratom ki visszafelé a tömb elemeit?
Xbox One: bandymnc
sztanozs
veterán
12-nél a 1100 helyes (1*8+1*4+0*2+0*1)
Vagy fordítva rakod be a tömbbe (végétől kezdve és a végére teszel egy '\0'-t (string vége karakter C-ben) és onnan iroatod ki ahova visszafele eljutottál (ezt csinálja az én példám). Vagy feltöltöd a tömböt rendesen és kiiratáskor címezed meg a végétől és egy csökkenő ciklusban egyesével kiírod a számokat (de ugye csak annyit, amennyit beleraktál).
Harmadik megoldás - valahogy így (fordító és ellenőrzés nélkül):
bitmaszk és bitshift
char* binaryConv(int szam){
char* binary = "0000|0000|0000|0000";
int bitmask = 0x4000; //16 384
int counter = 0;
while (bitmask > 0){
if (szam & bitmask) binary[counter] = '1'; // ha az adott bit 1, akkor a stringbe is azt helyettesítjük
counter++;
if (counter%4 == 0) counter++; //átléptetni az elválaszókat
bitmask = bitmask >> 1; //bitmaszkot eggyel jobbra tolni
}
1) Csak 4 jegyű számokig működik (azaz pontosabban 16384-ig)
2) Amit visszaad ki lehet irattatni printf-fel...
return binary;
}
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
bandi0000
nagyúr
köszöntem működik
Xbox One: bandymnc
sztanozs
veterán
És érted is?
Vazz, csak most látom, hogy beleszkerkesztettem a kód végébe (return elé) a kommentet...
És még egy plusz komment (tévedés az eredeti kommentben): nem 16384 a max, a 65535-ig menő számokon működik helyesen a kód (az annál nagyobb számokon az 15. feletti biteket nem írja ki)
1111 | 1111 | 1111 | 1111 = 65 535
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
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!