Hirdetés
Új hozzászólás Aktív témák
-
ArchElf
addikt
Nem akarom modani, de kicsit hibás is a program...
- Negatív számokra nem ír ki semmit (egy hibaüzenet azért elkélne)
- túl hosszú számokra hibát dob (puffer túlcsordulás miatt), ezt is illendő volna lekezelni
- az alábbi sor elé kell egy i = 0;
while(dec>=1000){
mert jelen helyzetben egymás mögé konkatenálja a sztringeket (amiből sok jó nem származik):test.exe 1 2 3
I III IIIIII
test.exe 1 5 7
I IV IVVIIAmúgy nagyvonalakban:
egesze fv: megnézi, hogy az n. argument egész számmá alakítható-e (az argumentum első része csak számokból áll-e)
atoi fv: string integer-ré varázsolása...
belső for ciklus: végigmegy az argumentumokon, kivonásos alapon "legyártja" római karakteres reprezentációt, kiírja a kimenetreAE
-
Iolé
csendes tag
Sziasztok!
Szeretném a segítségeteket kérni! Lenne egy program, amit nem egészen értek, főleg utolsó rész nem tiszta. Esetleg valaki tudna egy kis kommentet írni hozzá, hogy hogyan működik, meg mikor mit csinál, nagyon fontos lenne!
Ez volta feladat: A parancs a parancs sorban egy decimális számot (vagy decimális számokszóközökkel elválasztott sorozatát) vár(ja), amely(ek)nek kiírja római
szám megfelelőjét az stdout-ra.
Hibásan megadott parancs esetén a programnak rövid diagnosztikai
üzenetben informálnia kell a felhasználót arról, hogy a parancsot
hogyan kell használni. A diagnosztikai üzenetet az stderr-re kell
küldeni.
És a program:
#include <stdio.h>int main(argc, argv)
int argc;
char *argv[];
{
int i = 0, x=0;
int dec;
char rom[50];
if(argc == 1){
fprintf(stderr, "Hianyzik a parameter!");
exit( 1 );
}for(x=1;x<argc;x++){
if(egesze(argv[x])){
dec = atoi(argv[x]);
}else{
fprintf(stderr, "A parameterlistaban nem megfelelo az egyik ertek!");
exit( 1 );
}while(dec>=1000){
dec -= 1000;
rom[i] = 'M';
i++;
}
if (dec>=900){
dec-=900;
rom[i] = 'C';
i++;
rom[i] = 'M';
i++;
}
if(dec>=500){
dec -= 500;
rom[i] = 'D';
i++;
}
if (dec>=400){
dec -= 400;
rom[i] = 'C';
i++;
rom[i] = 'D';
i++;
}
while(dec>=100){
dec = dec-100;
rom[i] = 'C';
i++;
}
if(dec>=90){
dec -= 90;
rom[i] = 'X';
i++;
rom[i] = 'C';
i++;
}
if(dec>=50){
dec -= 50;
rom[i] = 'L';
i++;
}
if(dec>=40){
dec -= 40;
rom[i] = 'X';
i++;
rom[i] = 'L';
i++;
}
while(dec>=10){
dec -= 10;
rom[i] ='X';
i++;
}
if(dec == 9){
rom[i] = 'I';
i++;
rom[i] = 'X';
i++;
}
else{
if(dec >= 5){
dec -= 5;
rom[i] = 'V';
i++;
}
if(dec == 4){
rom[i] = 'I';
i++;
rom[i] = 'V';
i++;
}
else{
while(dec > 0){
dec -= 1;
rom[i] = 'I';
i++;
}
}
}
rom[i]='\0';
printf(" %s", rom);
}
exit(0);
}int egesze(s)
char *s[];
{
int i=0, kezd;
while (s[i]==' ' || s[i]=='\n' || s[i]=='\t')++i;
if(s[i]=='+' || s[i]=='-')++i;
kezd=i;
while(s[i]>='0' && s[i]<='9')++i;
if(i==kezd || s[i]!=' ' && s[i]!='\t' && s[i]!='\n' && s [i]!=0) return 0;
else return 1;
}int atoi(s)
char s[];
{
int i, n;
n = 0;
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++i)
n = 10 * n + (s[i] - '0');
return n;
}
Ú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!
- Bambu Lab 3D nyomtatók
- Geri Bátyó: Megint tahó voltam – SZEMÉLYISÉGFEJLŐDÉS
- Sony Xperia 1 VII - Látod-e, esteledik
- Samsung Galaxy Watch8 - Classic - Ultra 2025
- Elektromos rásegítésű kerékpárok
- OLED monitor topic
- Apple asztali gépek
- Hálózati / IP kamera
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- Android alkalmazások - szoftver kibeszélő topik
- További aktív témák...
- ÁRCSÖKKENTÉS Menő retró konfig: Q9550, Gigabyte P43, 4GB RAM, ASUS GT730
- Eladó karcmentes Apple iPhone 13 Pro Max 512GB / 12 hó jótállással
- Silvercrest Rajztábla
- Gamer PC-Számítógép! Csere-Beszámítás! R5 5600X / 32GB DDR4 / RTX 3060Ti 8GB / 500GB SSD
- LG 34GS95UE - 34" Ívelt OLED / QHD 2K / 240Hz & 0.03ms / 1300 Nits / NVIDIA G-Sync / AMD FreeSync
Állásajánlatok
Cég: FOTC
Város: Budapest