Hirdetés

2024. május 22., szerda

Gyorskeresés

Hozzászólások

(#3451) kispx válasza sztanozs (#3447) üzenetére


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 ]

(#3452) bandi0000 válasza sztanozs (#3450) üzenetére


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

(#3453) sztanozs válasza bandi0000 (#3452) üzenetére


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...

(#3454) sztanozs válasza bandi0000 (#3452) üzenetére


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...

(#3455) bandi0000 válasza sztanozs (#3453) üzenetére


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

(#3456) kispx válasza bandi0000 (#3455) üzenetére


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 ]

(#3457) sztanozs válasza kispx (#3456) üzenetére


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...

(#3458) bandi0000


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

(#3459) sztanozs válasza bandi0000 (#3458) üzenetére


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...

(#3460) kispx válasza sztanozs (#3457) üzenetére


kispx
addikt

Mindig is utáltam a római számokat.

Ez a honalp szerint a 737 az DCCXXXVII

(#3461) bandi0000 válasza sztanozs (#3459) üzenetére


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

(#3462) sztanozs válasza bandi0000 (#3461) üzenetére


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...

(#3463) bandi0000 válasza sztanozs (#3462) üzenetére


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

(#3464) kispx válasza bandi0000 (#3461) üzenetére


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 ]

(#3465) bandi0000 válasza kispx (#3464) üzenetére


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

(#3466) kispx válasza bandi0000 (#3465) üzenetére


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 ]

(#3467) bandi0000 válasza kispx (#3466) üzenetére


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

(#3468) kispx válasza bandi0000 (#3461) üzenetére


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 ]

(#3469) bandi0000 válasza kispx (#3468) üzenetére


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

(#3470) kispx válasza bandi0000 (#3469) üzenetére


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.

(#3471) bandi0000 válasza kispx (#3470) üzenetére


bandi0000
nagyúr

így már elvileg jó
Köszönöm a sok segítséget és türelmet mindkettőtöknek. :R :R :R

Xbox One: bandymnc

(#3472) bandi0000 válasza bandi0000 (#3471) üzenetére


bandi0000
nagyúr

ja és nem tudtok valami jó irományt amiből megtanulhatok jobban programozni C nyelven?

Xbox One: bandymnc

(#3473) kispx válasza bandi0000 (#3472) üzenetére


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.

(#3474) bandi0000 válasza kispx (#3473) üzenetére


bandi0000
nagyúr

majd akkor megnézem köszönöm

Xbox One: bandymnc

(#3475) Bobrooney válasza bandi0000 (#3472) üzenetére


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.

(#3476) bandi0000 válasza Bobrooney (#3475) üzenetére


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

(#3477) kingabo válasza bandi0000 (#3471) üzenetére


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.

(#3478) Bobrooney válasza bandi0000 (#3476) üzenetére


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.

(#3479) bandi0000 válasza kingabo (#3477) üzenetére


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

(#3480) bandi0000 válasza Bobrooney (#3478) üzenetére


bandi0000
nagyúr

hát úgy néz ki akkor máshol is "túlfizetik" a tanárokat :D

Xbox One: bandymnc

(#3481) kispx válasza bandi0000 (#3479) üzenetére


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 ]

(#3482) sztanozs válasza kispx (#3481) üzenetére


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...

(#3483) bandi0000


bandi0000
nagyúr

Érteni értem de azt hogy tudom leírni hogy maradék lett e vagy sem?

[ Szerkesztve ]

Xbox One: bandymnc

(#3484) bandi0000 válasza sztanozs (#3482) üzenetére


bandi0000
nagyúr

a tieddel csak annyi bajom van h ezt nem értem :D ilyet nem tanultam még sajnos

Xbox One: bandymnc

(#3485) kispx válasza bandi0000 (#3483) üzenetére


kispx
addikt

Link

% és / operátort nézd meg.

[ Szerkesztve ]

(#3486) bandi0000 válasza kispx (#3485) üzenetére


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

(#3487) kispx válasza bandi0000 (#3486) üzenetére


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.

(#3488) bandi0000 válasza kispx (#3487) üzenetére


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? :D
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

(#3489) bandi0000 válasza bandi0000 (#3488) üzenetére


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

(#3490) kispx válasza bandi0000 (#3489) üzenetére


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 ]

(#3491) bandi0000 válasza kispx (#3490) üzenetére


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

(#3492) kispx válasza bandi0000 (#3491) üzenetére


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 ]

(#3493) bandi0000 válasza kispx (#3492) üzenetére


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 :D

Xbox One: bandymnc

(#3494) bandi0000 válasza bandi0000 (#3493) üzenetére


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

(#3495) kispx válasza bandi0000 (#3494) üzenetére


kispx
addikt

Első hsz-ben mondtam, hogy fordítva kell majd kiíratni.

(#3496) Korcsii válasza bandi0000 (#3494) üzenetére


Korcsii
őstag

És ugye minden változót kipucolunk használat előtt vagy inicializáláskor.

(#3497) bandi0000 válasza Korcsii (#3496) üzenetére


bandi0000
nagyúr

persze az volt a hibám hogy nem 0-ztam le :D de már meg van
hogy iratom ki visszafelé a tömb elemeit?

Xbox One: bandymnc

(#3498) sztanozs válasza bandi0000 (#3494) üzenetére


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...

(#3499) bandi0000 válasza sztanozs (#3498) üzenetére


bandi0000
nagyúr

köszöntem működik :R

Xbox One: bandymnc

(#3500) sztanozs válasza bandi0000 (#3499) üzenetére


sztanozs
veterán

És érted is? :DDD

Vazz, csak most látom, hogy beleszkerkesztettem a kód végébe (return elé) a kommentet... :W

É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...

Copyright © 2000-2024 PROHARDVER Informatikai Kft.