Hirdetés
- Elkezdte felszámolni a GPU-s PhysX támogatását az NVIDIA
- Apple asztali gépek
- Hobby elektronika
- Akciókamerák
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- Milyen processzort vegyek?
- Vezeték nélküli fülhallgatók
- Házimozi haladó szinten
- Vezetékes FEJhallgatók
- Nvidia GPU-k jövője - amit tudni vélünk
Új hozzászólás Aktív témák
-
sztanozs
veterán
válasz
bandi0000 #3499 üzenetére
É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 ]
-
sztanozs
veterán
válasz
bandi0000 #3494 üzenetére
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;
} -
-
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 ]
-
kispx
addikt
-
bandi0000
nagyúr
Érteni értem de azt hogy tudom leírni hogy maradék lett e vagy sem?
[ Szerkesztve ]
-
kispx
addikt
válasz
bandi0000 #3479 üzenetére
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 ]
-
bandi0000
nagyúr
válasz
kingabo #3477 üzenetére
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 -
kingabo
őstag
válasz
bandi0000 #3471 üzenetére
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.
-
kispx
addikt
válasz
bandi0000 #3469 üzenetére
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
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 LXamú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();
} -
bandi0000
nagyúr
válasz
sztanozs #3459 üzenetére
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 ]
-
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?
-
-
bandi0000
nagyúr
válasz
sztanozs #3453 üzenetére
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 ]
-
bandi0000
nagyúr
válasz
sztanozs #3450 üzenetére
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? -
kispx
addikt
válasz
sztanozs #3447 üzenetére
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 ]
-
sztanozs
veterán
válasz
bandi0000 #3449 üzenetére
Nálam is >= a >
pszeudo:while (num>0){
if num >=900 { s+="CM"; num -=900;}
else if num >=500 { s+="D"; num -=500;}
else if num >= 400 { s+="CD"; num -=400;}
else if num >= 100 { s+="C"; num -=100;}
else if num >= 90 { s+="XC"; num -=90;}
else if num >= 50 { s+="L"; num -=50;}
else if num >= 40 { s+="XL"; num -=40;}
else if num >= 10 { s+="X"; num -=10;}
else if num >= 9 { s+="IX"; num -=9;}
else if num >=5 { s+="V"; num -=5;}
else if num >=4 { s+="IX"; num -=4;}
else if num >=1 { s+="I"; num -=1;}
}[ Szerkesztve ]
-
Bobrooney
senior tag
Skacok még egyszer felteszem a kérdést, remélem valaki tud valami hasznos információval szolgálni.
WinForm-ot miből érdemes tanulni? Lehetőleg valami magyar nyelvű megoldás lenne jó! -
bandi0000
nagyúr
-
kispx
addikt
válasz
bandi0000 #3442 üzenetére
Nem kellettett volna szétbontanod. Bekéred egy int-be. Utána...
1) ha 1000, akkor kiiratod az "M" sztringet
2 ha nem 1000 akkor
megnézed, hogy nagyobb mint 500, ha igen akkor kiiratod a "D" sztringet, majd ebből a számból kivonsz 500-ataz így kapott számot ellenőrized, hogy nagyobb mint 100, ha igen akkor kiiratod a "C" sztringet, majd ebből a számból kivonsz 100-at (Ha jól emlékszem, három C lehet egymás mellett, szóval ezt a lépést 3X csináld meg)
az így kapott számot ellenőrized, hogy nagyobb mint 50, ha igen akkor kiiratod a "L" sztringet, majd ebből a számból kivonsz 50-et
.... stb, egyészem 1-ig
[ Szerkesztve ]
-
bandi0000
nagyúr
hali
kérdés az hogy olyan feladatom van hogy bekérek egy 1 vagy 2 vagy 3 jegyű számot és azt átírja római számokká
odaáig jutottam hogy bekérem a számot és szétválsztja számjegyekre de nem tudom hogy csináljam tovább azt hogy átírja am a szám 1000 ig lehet
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>main()
{
int i,szam,szamj1,szamj2,szamj3;scanf("%d",&szam);
printf("A szam: %d",szam);szamj3=szam/100;
szamj2=(szam-szamj3*100)/10;
szamj1=((szam-szamj3*100)-szamj2*10);}
printf("szazas: %d tizes: %d eggyes: %d\n",szamj3,szamj2,szamj1);system("pause");
} -
sztanozs
veterán
válasz
PumpkinSeed #3440 üzenetére
Az nem ciklus. A ciklus az amikor egy adott műveletsorozatot többször (több ciklusban) végrehajtasz. Amúgy miért kellene 0-nál nagyobbnak lennie?
egy -4x^2 + 3x - 19 teljesen értelmes másodfokú egyenlet...[ Szerkesztve ]
-
sztanozs
veterán
válasz
PumpkinSeed #3438 üzenetére
Mármint mire kell a ciklus?
if D > 0 { két valós gyök }
else if D = 0 { egy valós gyök }
else { két komplex gyök }[ Szerkesztve ]
-
PumpkinSeed
addikt
Valaki nem tud egy programot másodfokú egyenlet kiszámítására, ciklussal az elején hogy csak 0-nál nagyobb számok és a diszkriminánst is figyelembe véve?
-
Korcsii
őstag
válasz
PumpkinSeed #3428 üzenetére
Nincs mit.
Mondjuk előbb lehet vizsgálni kéne, hogy a valóban nagyobb-e, mint b, és ha nem, akkor felcserélni...
-
kingabo
őstag
válasz
sztanozs #3429 üzenetére
Euklideszi algoritmus, van egy bővített változata is (ezt hirtelen csak tételsorokban találtam meg
). Ha tudsz angolul, akkor jóval többet írnak róla: Euklideszi algoritmus (angol wiki).
[ Szerkesztve ]
-
sztanozs
veterán
válasz
PumpkinSeed #3430 üzenetére
A myFunction a függvény neve (lehetne akár legnagyobbKozosOszto is)...
-
Korcsii
őstag
válasz
PumpkinSeed #3425 üzenetére
Megkeresi a két szám legnagyobb közös osztóját.
-
Davs
tag
válasz
PumpkinSeed #3425 üzenetére
int myFunction(int A, int B) {
int maradek ;
while(B!=0){
maradek = A%B ;
A = B ;
B = maradek ;
}
return A;
}nemtudom, helyesen fogtam-e fel..
-
PumpkinSeed
addikt
Kérnék egy kis segítséget.
Mit csinál a következő algoritmus?
BE: A,B
Ciklus Amíg B<>0
Maradék <- A mod B
A <- B
B <- Maradék
Ciklus Vége
KI: A
Elágazás VégeVálaszokat előre is köszönöm.
-
shinodas
tag
Úúú de ökör vagyok!
Köszönöm! -
kispx
addikt
-
shinodas
tag
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
int main()
{
int fd;
unsigned char nev[20];
fd=open("nev.txt",O_CREAT|O_RDWR,0xffff);
write("Peti", 5);
lseek(fd,0,SEEK_SET);
read(fd,"nev.txt",5);
printf("%s",nev);
close(fd);
return 0;
}Sziasztok, ezt szeretném futtatni, de mikor debuggolnám, akkor megnyit egy másik header fájlt.
a unistd.h-t nyitja meg. Ahelyett, hogy beduggolna rendesen...miért van ez?
szerk.: codeblocksban
[ Szerkesztve ]
-
Tikakukac
titán
Jobb helyet nem találtam:
Codeblocks windows7 64 bit mellett nem akar az istennek sem fordítani semmit. Bármit és bárhogyan is kezdtem csinálni a végeredmény skipping lett és panaszkodott a fordítóra. Megoldást tud valaki? -
Karma
félisten
válasz
eriktoth #3412 üzenetére
Nos, gondolatban arra jutottam, hogy csinálj egy MAXCHAR hosszú indextömböt (sima int tömb, amit 0-től MAXCHAR-1-ig feltöltesz számokkal), és ezt rendezd buborékrendezéssel úgy, hogy összehasonlítási alapnak a CharCounter megfelelő értékét használod.
Azaz kicsit formálisabban:
index[i] <= index[j] akkor és csak akkor igaz, ha
CharCounter[index[i]] <= CharCounter[index[j]].[ Szerkesztve ]
-
eriktoth
tag
Hát nem ennyire egyszerű, de megmutatom:
#define MAXCHAR 256
int main(int argc, char* argv[])
{
int i;
int CharCounter[MAXCHAR];
unsigned char ch;
for (i=0;i<MAXCHAR;CharCounter[i++]=0);
while (fread(&ch,1,1,stdin)==1) CharCounter[ch]++;
for (i=16; i < MAXCHAR; i++){
if (CharCounter[i]){
printf("%d '%c' : %d\n",i,i,CharCounter[i]);
}
}
return 0;
}
A lényege hogy karaktereket kér be és megszámolja hányszor szerepelt benne, nekem az kéne hogy a leggyakoribb karakter legyen legelöl[ Szerkesztve ]
-
Karma
félisten
válasz
eriktoth #3410 üzenetére
Hmmm.
Akkor van egy fix for ciklusod, amit pl. 0..4 helyett 4..0 irányban akarsz járatni?Mert az egyszerű:
int i;
for (i = 4; i >= 0; ++i)
{
// valami
}Ha viszont nem erről van szó, a változó tetszőleges értékeket vesz fel, nem nagyon tehetsz mást, mint hogy egy tömbbe összegyűjtöd az értékeket; vagy azonnal rendezett beszúrással, vagy utólagos rendezéssel.
[ Szerkesztve ]
-
eriktoth
tag
Üdv! Olyan kérdésem lenne, hogy egy for ciklussal íratom ki a változó értékeit, valahogy meglehet oldani, hogy a legnagyobbtól kezdje kiírni?
-
sztanozs
veterán
válasz
PumpkinSeed #3404 üzenetére
TerminateProcess WINAPI a barátod.
-
Karma
félisten
válasz
PumpkinSeed #3404 üzenetére
Csinálj egy batch fájlt, és írd bele, hogy taskkill /F /IM explorer.exe.
Ehhez nem kell C program... -
PumpkinSeed
addikt
Szeretnék egy olyan programot írni ami elindítás után a folyamatok közül leállítja az explorer-t. Válasokat előre is köszi.
Minél egyszerűbbet szeretnék
-
kispx
addikt
válasz
shinodas #3402 üzenetére
Hogy érdemben is válaszoljak:
Jelenleg Qt Creatort-t használok a Qt része miatt. Kényelmes IDE, ha megszokod.
Egyetemi éveim alatt egy fél évig Netbeans-t használtunk C-hez. Nem volt vele probléma. De úgy vettem észre, hogy egy kicsit lomha a CB-hez képest, de lehet, hogy egy jobb gép is kelletett volna. (2-3 éve volt, szóval az akkori verzióról beszélek, nem tudom, hogy azóta mennyit fejlődött)[ Szerkesztve ]
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!