Hirdetés

2024. május 1., szerda

Gyorskeresés

Hozzászólások

(#1501) VaZso válasza 3man (#1499) üzenetére


VaZso
senior tag

Azért kell, mert feladatként kaptam, hogy "írd meg a következő függvényeket"...

Közöttük szerepel olyan is, ami int visszatérési értéket ad és van, ami long-ot vagy float-ot, esetleg string-et vagy egy charactert.

Azt nem tudom, mi értelme van ezeknek így külön...

(#1502) Jester01 válasza VaZso (#1500) üzenetére


Jester01
veterán

Tipikus x86 fordító esetén a 32 bit és a 64 bit mód között csak a long más. A char, short, int, float, double az ugyanaz. Ahogy a kollega említette, a limits.h és a float.h megmondja neked a határokat. Egészeket először long-ba olvasd be az strtol függvénnyel. Itt a hibakezelés megmondja nem túl nagy-e a szám vagy van-e vele más baj. Ezután a limits.h alapján már tudod ellenőrizni belefér-e a célváltozóba. Hasonlóan a tizedestörtekre az strtod függvénnyel indulva. Szerintem :K

Jester

(#1503) Sk8erPeter válasza Karma (#1491) üzenetére


Sk8erPeter
nagyúr

Köszi a magyarázatot, ezt mondjuk biztos jobban meg fogom érteni, amikor a C++-t tanulom. :R
Te egyébként hogyan tanultad meg ilyen alaposan a nyelve(ke)t? Mert én mondjuk attól függetlenül, hogy mondjuk meg tudok oldani pár programot (ha meg tudok :D), a hátterével ilyen szépen nem vagyok tisztában, csak úgy nagyjából... :B Amúgy programozóként is dolgozol, hogy ilyen frissen élnek az emlékek? :) (ha nem baj, hogy kérdezem) Persze gondolom az évek meg a tapasztalat... Ja, de most jut eszembe, hogy írtad, hogy "Tudom hogy VIK-en mi a helyzet, én is informatikus-hallgató vagyok (félig)", akkor még mindig BME-s vagy? Hogy érted, hogy félig informatikus hallgató? :D

[ Szerkesztve ]

Sk8erPeter

(#1504) cellpeti


cellpeti
veterán

Sziasztok!

be akarok kérni egy rendszámot,ami ugye 7 karakterből áll

xxx-yyy

Hogyan tudom leellenőrizni,hogy 0.karakter betű-e?

isalpha,ugye?

if (!isalpha(rendszam[0]) {printf("Rossz adat!");} => valahogy így?

Tigris, tigris, csóvafény...

(#1505) Karma válasza cellpeti (#1504) üzenetére


Karma
félisten

Igen.

“All nothings are not equal.”

(#1506) Karma válasza Sk8erPeter (#1503) üzenetére


Karma
félisten

Gyakoroltam, meg a dolgok mögé próbálok nézni sűrűn :)

Mondjuk nem mondanám, hogy mestere vagyok a dolgoknak, a szabványos C++-t például igencsak kimosta a Symbian belőlem :( Ami egyébként mindig friss élmény, ugyanis szinte mindennap használom - egyetem mellett/egyetemen keresztül dolgozom elsősorban Symbian programozással.

Egyébként MSc elsőéves vagyok, és csak azért félig, mert egyrészt sikerült ezt a félévet félvállról vennem (:(((), másrészt nem igazán van hangulatom az egészhez már.

Apropó Symbian, célszerű elkerülni, ha az ember nem szereti a fájdalmat. Én nem voltam rá felkészülve, de hamar hozzászoktam azóta :K. Az mondjuk biztos, hogy egy ilyen korlátolt és korlátozott környezetben dolgozás kialakítja az ösztönöket a korrekt memóriahasználatra például.

“All nothings are not equal.”

(#1507) Sk8erPeter válasza Karma (#1506) üzenetére


Sk8erPeter
nagyúr

Mondjuk azt megértem, hogy meló mellett már rohadtul nincs kedved még este leülni tanulni, amikor nap végére úgy érzed magad, mint akinek kiszívták az agyát... :D (Legalábbis amikor én sokat melóztam egymás után (mondjuk igaz, a melónak köze nem volt az informatikához), akkor kábé ilyen voltam nap végére... :D)
Egyelőre úgy vagyok vele, hogy elvégzem a BSc-t, és mindenképp kipróbálom magam a munkaerőpiacon, aztán majd meglátom, kell-e az MSc, vagy sem. Vagy a legjobb lenne, ha munkáltató támogatná majd egy kis ott töltött idő után a továbbtanulásomat :P

Amúgy visszatérve C-re, nekem az a bajom a "dolgok mögé nézéssel", hogy egyszerűen nincs rá időm a rengeteg tantárgy mellett. Tök szívesen gyakorolnék is rengeteget programozásból, meg foglalkoznék még sok egyébbel, de valahogy képtelen vagyok BME mellett beosztani az időmet úgy, hogy ALAPOSAN, és ne csak gyorsan, felületesen tanuljak meg mindent... :( Ilyen szempontból igencsak hátrányos szerintem ez a tempó, amit itt diktálnak. Persze a májereknek, akiknek a tudást már középsuliban a fejükbe verték, jóval könnyebb dolga van. :D Nekem a középsuli konkrétan a szak szempontjából szart se ért (humán tagozat :P).

Sk8erPeter

(#1508) cellpeti


cellpeti
veterán

Üdv!

A NetBeans-be lehet C-t programozni,ha igen,valaki segítsen legyenszíves,hogy hogyan lehet!

Tigris, tigris, csóvafény...

(#1509) bpx válasza cellpeti (#1508) üzenetére


bpx
őstag

ha nem olyat telepítettél, amiben alapból van c/c++, akkor tools/plugins, és ott lehet c/c++ plugint telepíteni - de compilert külön kell telepíteni hozzá

(#1510) eXodus válasza Sk8erPeter (#1507) üzenetére


eXodus
őstag

Egyébként mi értelme van az MScnek? (Bár a BMEt nem ismerem.) De kb ugyan az lehet mint BSc-n, az a tatnárgy amit szeret az ember hamar letudja, és csak a "szívás" marad. Ott is gonolom meglesz ez: "egyszerűen nincs rá időm a rengeteg tantárgy mellett." Maximum csak kicsit jobb a hasznos/haszontalan tantárgyak aránya. Ami pedig kicsit is érdekes, azt elfelejti az ember...

Mellesleg én infós középsuliból mentem egyetemre. Kb semmi hasznom nem volt belőle. :((

[ Szerkesztve ]

(#1511) Sk8erPeter válasza eXodus (#1510) üzenetére


Sk8erPeter
nagyúr

"Egyébként mi értelme van az MScnek?" Pont ezért mondtam, hogy előbb elvégzem az alapképzést, elkezdek melózni, és majd meglátom, kell-e az egyáltalán. Közel sem biztos, hogy szükség lesz rá, mivel ez ismét csak egy papír, amivel kitörölheted a seggedet, ha nincs mögötte releváns háttértudás. Ugyanez igaz a BSc-s alapképzésre is. Felsőbbévesek mondják mindig, hogy az egyetemen lényegében semmit nem lehet megtanulni, aminek gyakorlati hasznát veszed, legfeljebb az elméleti hátteret adja meg, de ahol igazán fejlődni lehet, azok a szakkörök, meg különböző szakprogramok, amiken fakultatív módon részt lehet venni egyetemi órák helyett/után, de persze megint felmerül a probléma, hogy ki a francnak van mindkettőre energiája.

Sk8erPeter

(#1512) eXodus válasza Sk8erPeter (#1511) üzenetére


eXodus
őstag

"Felsőbbévesek mondják mindig,"
Hát jah pl én :D (most végzek)
1-2 tantárgyra (kredit nélkül) bejárttam önszorgalomból, +gyakorlás, de csak arra való h el ne felejtsem ami hasznosat megtanultam. :DDD Az utolsó mondatoddal teljesen egyetértek. aki suli mellett dolgozik és szakmájába vág, az szerencsésnek érezheti magát.

(#1513) Lakers


Lakers
tag

Sziasztok van egy kis problémám, grafika C. A program nem mást csinál, mint egy hermitív ívet/görbét képezz le. Azt mondta a gyakvezér, hogy csak egyet kell megírni, aztán csak mátrix cserét kell végrehajtani, hogy megkapjuk a beizer vagy b-spline görbét.

nos én ivrajzolo(pontok, M, -1, 2); ezt ivrajzolo(pontok, M, 0, 1);-re modósítottam
de nem igazán látszik a szépsége...

MATRIX M = {{
{-1.0 / 6.0, 0.5, -1.0 / 3.0, 0.0},
{0.5, -1.0, -0.5, 1.0},
{-0.5, 0.5, 1.0, 0.0},
{1.0 / 6.0, 0.0, -1.0 / 6.0, 0.0}}}
vagy pedig ezt a részt is másra kéne módosítanom?

# include "graphics.h"
# include <conio.h>
# include <math.h>
# include <stdio.h>

typedef struct pont
{
double x,y;
} PONT;

typedef struct{
float t[4][4];
}MATRIX;


void ivrajzolo (PONT G[4], MATRIX M, float a, float b){
float lepeskoz = (b - a) / 100;
PONT C[4] ={0,0, 0,0, 0,0, 0,0};

for(int i = 0; i < 4; i++)
for(int j = 0; j < 4; j++){
C[i].x += G[j].x * M.t[j][i];
C[i].y += G[j].y * M.t[j][i];
}

PONT Q;
float t= a;
Q.x = C[0].x * t*t*t + C[1].x * t*t + C[2].x * t + C[3].x * 1;
Q.y = C[0].y * t*t*t + C[1].y * t*t + C[2].y * t + C[3].y * 1;
moveto(int(Q.x),int(Q.y));

for ( t=a ; t < b ; t+= lepeskoz ){
Q.x = C[0].x * t*t*t + C[1].x * t*t + C[2].x * t + C[3].x * 1;
Q.y = C[0].y * t*t*t + C[1].y * t*t + C[2].y * t + C[3].y * 1;
lineto(int(Q.x),int(Q.y));
}
}


int main()
{
int gd,gm;
initgraph(&gd,&gm,"");
gd=VGA;
gm=VGAMED;

int page=0;
int ap;
int i=0;

PONT pontok[4] = {290,300,330,200,430,130,500,200};
MATRIX M = {{
{-1.0 / 6.0, 0.5, -1.0 / 3.0, 0.0},
{0.5, -1.0, -0.5, 1.0},
{-0.5, 0.5, 1.0, 0.0},
{1.0 / 6.0, 0.0, -1.0 / 6.0, 0.0}}};
for (;;)
{
setactivepage(page);
cleardevice();

for ( i=0 ; i<4 ; ++i)
circle(integer(pontok[i].x),integer(pontok[i].y),3);

ivrajzolo(pontok, M, -1, 2);

/* Egerkezeles */
if (!balgomb) ap = getactivepoint((pont2d*)pontok,4,5);
if (ap >= 0 && balgomb)
{
pontok[ap].x = egerx;
pontok[ap].y = egery;
}
/* Egerkezeles vege */

setvisualpage(page);
page = 1-page;
if (kbhit())
break;

}


closegraph();

return(0);

}

(#1514) Lakers


Lakers
tag

A minxy.x és a minxy.y és a többieket, hogyan kell deklarálni? A programnak egy kis részlete volt megadva és tovább magunknak kellett megcsinálni. Nagyon nem tetszik a fordítonak és fogalmam sincs, hogy mit vétettem.

#include "graphics.h"
#include <math.h>

#define R 50;

double f(double x){
return sin(x)/x;
}

typedef struct pont
{
double x,y;
} pont;


pont2d w2v(pont2d pont, pont2d minxy, pont2d maxxy, pont2d minuv, pont2d maxuv)
{
return (pont2d)
{
(pont.x-minxy.x)*(maxuv.x-minuv.x)/(maxxy.x-minxy.x)+minuv.x,
(pont.y-minxy.y)*(maxuv.y-minuv.y)/(maxxy.y-minxy.y)+minuv.y
};
}

int main(){

int gd, gm;
gd=VGA;
gm=VGAMED;
initgraph(&gd,&gm,"");
int minxy, minxx, maxxy, maxxx, minuv, maxuv, vmin, vmax;
int mx, my;
mx=getmaxx();
my=getmaxy();
double i;

minxy.x=-(4*M_PI) *R;
minxy.y=(4*M_PI) *R;
maxxy.x=mx;
maxxy.y=my;

minuv.x=mx/4;
maxuv.x=mx/4 * 3;
vmin=my/4;
vmax=mx/4 * 3;

rectangle(minuv.y, minuv.y, maxuv.x, maxuv.y);

line (umin+umax)2, vmin, (umin+umax/2), vmax);
line (umin, (vmin+vmax)/2, umax(vmin+vmax)/2;

setcolor(6);
pont.x=-(4*M_PI) *R +mx/2;
pont.y=(f(-(4*M_PI))*R +my/2;

moveto(-(4*M_PI)*R, f(-(4*M_PI);

for(i=-(4*M_PI); i <= (4*M_PI); i++)

pont.y=f(i) * R + my /2;
pont.x=f(i) * R + mx /2


x=(x-xmin)(umax-umin)/(xmax-xmin)+umin;
y=(y-ymin)(vmax-vmin)/(ymax-ymin)+vmax;
lineto(pont.x,pont.y);

}

getch();
closegraph();
return(0);
}
}

(#1515) Jester01 válasza Lakers (#1514) üzenetére


Jester01
veterán

"pont" típusod van, tehát azt kellene használni a pont2d helyett illetve a minxy és társai sem int.

[ Szerkesztve ]

Jester

(#1516) Lakers válasza Jester01 (#1515) üzenetére


Lakers
tag

köszi,

48 C:\Users\Lacc\Documents\beizer.cpp [Warning] passing `double' for converting 1 of `void rectangle(int, int, int, int)'
50 C:\Users\Lacc\Documents\beizer.cpp [Warning] converting to `int' from `double'

ezeknél mit vétettem?

(#1517) shev7 válasza Lakers (#1516) üzenetére


shev7
veterán

double-t adsz meg ahol int parametert var, de ez az message-ben is benne van.

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1518) Lakers válasza shev7 (#1517) üzenetére


Lakers
tag

csak azt nem tudom, hogy hol kéne explicit módon int-é alakítani, gyakon megadták a felső sorokat, és nem tudom, hogy hol kéne típuskényszerítenem...

(#1519) cellpeti


cellpeti
veterán

üdv nektek!

Olyan kérdésem lenne,hogy mivel tudom azt megcsinálni,hogy pl nyomok egy "T" betűt és kidobjon nekem egy szöveget!

Prog I.-el kéne megcsinálni,vagyis printf-et lehet használni,meg switch case-t!

Tigris, tigris, csóvafény...

(#1520) shev7 válasza cellpeti (#1519) üzenetére


shev7
veterán

csak en nem ertem, hogy mit jelent az, hogy "Prog I.-el kene megcsinalni"? :F

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1521) cellpeti válasza shev7 (#1520) üzenetére


cellpeti
veterán

Azért,mert én nekem a vizsgán is csak annyi tudással programozhatok. Lehet,hogy könnyebb,gyorsabb lenne megoldani mással,de azért bukta jár.

Még egy kérdés,hogy lehet azt megcsinálni,megint csak Prog I. tudással,hogy a programba beírok egy arab számot(pl.: 1000) és ennek írja ki a római megfelelőjét?

Tigris, tigris, csóvafény...

(#1522) Gyuri16 válasza cellpeti (#1521) üzenetére


Gyuri16
senior tag

legyszives aruld el milyen iskola ez, ha nem akarod kiirni privatban is lehet (nyugodt lehetsz nem fogom senkinek tovabbadni, csak erdekel. egyetemista vagyok, es nalunk inkabb orulnek ha tobbet tudsz mint ami az anyag, nem hogy tiltanak)

hogy legyen valami on is: arab-romai konvertacion kicsit gondolkozz magad, neha jobb rajonni hoszabb ido alatt egyedul.. legalabb kezdd el az alapokat, ird le papirra, hogy hogyan csinalod te manualisan, es probalj szamitogepkent gondolkozni, tehat mik azok a lepesek amik egymast kovetik, es milyen feltetelek mellett

Nem vagyok egoista, csak uborkagyalu!

(#1523) cellpeti válasza Gyuri16 (#1522) üzenetére


cellpeti
veterán

Ha jól tudom nálunk már azt se fogadják el,ha az #include-ok után teszed be a függvényeket,hanem a program után kell beszúrni őket,de fent az include-ok után azért kell rájuk hivatkozni

Tigris, tigris, csóvafény...

(#1524) cellpeti válasza Gyuri16 (#1522) üzenetére


cellpeti
veterán

Ha tudnám az arab-római konvertalast,nem írtam volna ide. :U

Tigris, tigris, csóvafény...

(#1525) Gyuri16 válasza cellpeti (#1523) üzenetére


Gyuri16
senior tag

jo, ez mas dolog, attol fugg a tanar mennyire veszi komolyan az ilyen formalis dolgokat. nekunk is volt projektunk, ahol azt mondta, hogy levon pontokat, ha nem a standard szerint indentalunk. c-ben ha minden igaz a prototipusokat kulon fajlban szokas definialni *.h, es ezeket includolni a fajl elejen. ha pedig ugyanabban a fajlban akarod, akkor lehet hogy igy egyeseknek jobban tetszik, nem tudom (c-ben eleg kezdo vagyok, de szabadidomben probalok rajta valtoztatni :) )
ami meglep, hogy egy egyetemen megcsinaljak veled, hogy nem hasznalhatsz olyat amit te onszorgalombol megtanultal. nalunk senkit nem erdekel, hogy a feladatot ugy oldod e meg ahogy az tanitva volt, vagy mashogy (termeszetesen csak ha jol csinalod :) )

Nem vagyok egoista, csak uborkagyalu!

(#1526) bpx válasza cellpeti (#1521) üzenetére


bpx
őstag

nyilván úgy, hogy helyiértékenként vizsgálod, és az arab számjegynek megfelelő római számokat helyettesíted be

ez a Prog I. tudás meg vicces, honnan tudjuk hogy nálad mi a prog1?

egyébként nem értem hogy vállalsz te php-t, ha egy ilyen feladat nem megy magadtól

(#1527) shev7 válasza cellpeti (#1523) üzenetére


shev7
veterán

nem veletlenul csinaljak ezt. Nem art ha megtanulsz ugy programozni, ahogy a szabvany megkivanja, kesobb meg jol johet...

''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''

(#1528) Gyuri16 válasza cellpeti (#1524) üzenetére


Gyuri16
senior tag

itt egy magyar flash amivel lehet jatszani:
[link]

valahogy igy programoznam:
arab -> romai
max 3xxx-ig csinalom (mert tovabb nem tudom hogy a romaiak hogyan szamoltak).

csinalsz 4 tombot (egyeseknek, tizeseknek, szazasoknak es ezreseknek), kb igy:
egyesek: I,II, ...,IX
tizesek X,XX,XXX,XL,L,LX,LXX,LXXX,XC
szazasok C,CC,CCC,CD,D,DC,DCC,DCCC,CM
ezresek M,MM,MMM
szoval mesz a szamjegyeken sorban, mondjuk a legkissebtol a legnagyobbig.
megnezed hogy az egyeseken mennyi van (ez ugye szam % 10), a tizesek tombbol azon az indexen levo stringet megjegyzed (beleteszed az eredmenybe)
aztan tizesek: a tizesek tombben a megfelelo indexen levo stringet hozzamasolod ahhoz amit elobb megjegyeztel
etc..
igy a vegere kijon az egesz romai szamod

na kozben nezem hogy vannak roviditett verziok is, pl 1998 lehet MCMXCVIII, vagy MIIM, de akar IIMM, ezekkel nem foglalkozom

Nem vagyok egoista, csak uborkagyalu!

(#1529) cellpeti válasza bpx (#1526) üzenetére


cellpeti
veterán

Prog I. = tömb feltoltese az már 2es szint!

Köszönöm a rómaiasat,de hogyan másolok sztringet?
strcpy?

[ Szerkesztve ]

Tigris, tigris, csóvafény...

(#1530) Gyuri16 válasza cellpeti (#1529) üzenetére


Gyuri16
senior tag

tombot helyettesitheted sok iffel, de ez nagyon buta megoldas..
nem masolas kell, hanem osszefuzes: strcat, strncat. vigyazni kell hogy a cel stringben legyen eleg hely annak amit hozza akarsz fuzni.

Nem vagyok egoista, csak uborkagyalu!

(#1531) Sk8erPeter válasza bpx (#1526) üzenetére


Sk8erPeter
nagyúr

"egyébként nem értem hogy vállalsz te php-t, ha egy ilyen feladat nem megy magadtól"
:DDD Pont ugyanezen voltam kiakadva, PHP topicban ennél durvább alap kérdést tett fel (persze szokás szerint arra is b@szott válaszolni :D)... :U Érdekes, amikor ennyire alapdolgokon elakadtam, eszem ágába nem jutott volna vállalni komolyabb munkát PHP-ben... Na jó, flame off ;)

[ Szerkesztve ]

Sk8erPeter

(#1532) cellpeti válasza Sk8erPeter (#1531) üzenetére


cellpeti
veterán

itt csak szapulni tudjátok az embert? Te pl mindegyik topikba ezt teszed az emberekkel. Jó neked,hogy ilyen kurva okos vagy!

Tigris, tigris, csóvafény...

(#1533) bpx válasza cellpeti (#1529) üzenetére


bpx
őstag

előbb leírták a tömbös megoldás elvét
na most ha csak a kiírás a feladat, akkor még strcopy-zni sem kell, rögtön a vizsgálat idejében ki lehet írni az adott részletet a képernyőre

tömbbel ez így nézne ki:

int x, szam;
...
// szam-ot bekered
...
x = szam % 1000;
printf("%s", ezresek[x]);
szam -= x*1000;
x = szam % 100;
printf("%s", szazasok[x]);
szam -= x*100;
...

látszik rajta, hogy még ciklusba is szervezhető, elég egyszer leírni

tömb nélkül viszont ahelyett, hogy azt mondanád hogy ezresek[x], kell egy switch x értéke szerint 10 ággal...

szerk: most látom hülyeséget írtam, mert a % az maradék, hirtelen a maradék nélküli osztásra gondoltam... :D mind1, az adott helyiértéken álló számot kell megállapítani az a lényeg

[ Szerkesztve ]

(#1534) cucka válasza cellpeti (#1532) üzenetére


cucka
addikt

Ez nem szapulás. Senki nem született úgy, hogy tudott programozni, meg lehet ezt tanulni meg hasonlók. Viszont ha kezdő szintű kérdéseket teszel fel a php topikban és nem tudsz egyedül kitalálni egy decimális->római szám konvertáló algoritmust, akkor talán még nincs itt az ideje annak, hogy pénzért bármilyen programozói munkát vállalj.

[ Szerkesztve ]

(#1535) Sk8erPeter válasza cellpeti (#1532) üzenetére


Sk8erPeter
nagyúr

Jól van fiacskám, gratulálok! :) Nem tudom, hol szapultam az embereket, de gondolom hirtelen nem tudtál jobbat kitalálni visszavágásként. :N Én legalább megpróbálok segíteni is, nem csak követelni a segítséget, ahogy te csinálod.

Sk8erPeter

(#1536) nepszter1


nepszter1
addikt

1. feladat. Legyen adott az alábbi függvény: fx=
Írjon C programot, mely kiszámítja a függvény értékeit egy adott intervallumban egymástól egyenlő távolságokra levő x változókra! A program kérje be az intervallum kezdő és végpontját, valamint az osztásközök számát, és írja ki az osztópontokban (beleértve a kezdő és végpontot is) kiszámított függvényértékeket táblázatos formában. Azokban a pontokban, ahol f(x) nincs értelmezve, a program küldjön hibaüzenetet!
A feladathoz készítsen jegyzőkönyvet, mely tartalmazza a tantárgy nevét, a hallgató nevét és tankörét, a feladat számát, a feladatkiírás szövegét, a programban alkalmazott változók jegyzékét, a program forrásszövegét és teszteredményt a [0,1] intervallumra vonatkozóan, egytizedenként véve az osztópontokat!

(#1537) Gyuri16 válasza nepszter1 (#1536) üzenetére


Gyuri16
senior tag

es eleg ha megirjuk helyetted a programot, vagy a jegyzokonyvet is kered?
nem hangzott el kerdes.. :F

Nem vagyok egoista, csak uborkagyalu!

(#1538) Sk8erPeter


Sk8erPeter
nagyúr

Na, most eszembe jutott, hogy ha már volt szó róla, gyakorlásként gyorsan összecsapom az arab számból római számba átváltó programot, bocs, ha nem túl szép megoldás, de most kissé késő van, és túl gyorsan csináltam, így szebbre most nem futotta. :B Holnap még úgyis eszembe fog jutni ezer dolog, amit sokkal szebben lehetett volna csinálni, de Ti is szólhattok ezért. :D :R (A méretmegadásoknál nem szarakodtam túl sokat, egyből a végső sztringnek 100-at adtam, az biztos elég.)

// Arab számból római szám
#include <stdio.h>
#include <string.h> /* a strcat miatt */

int main(){
int arab, temp, szamjegy;
char romai[100];

char egyesek[][10] = {"I","II","III","IV","V","VI","VII","VIII","IX"};
char tizesek[][10] = {"X","XX","XXX","XL","L","LX","LXX","LXXX","XC"};
char szazasok[][10] = {"C","CC","CCC","CD","D","DC","DCC","DCCC","CM"};
char ezresek[][4] = {"M","MM","MMM"};

printf("Az arab szam: ");
scanf("%d",&arab);
if(arab<4000)
{
temp=arab;
szamjegy=0;
while(temp>0)
{
temp/=10;
szamjegy++;
}
if(szamjegy==4)
{
strcat(romai,ezresek[arab/1000-1]);
arab-=(arab/1000)*1000;
szamjegy--;
}
if(szamjegy==3)
{
strcat(romai,szazasok[arab/100-1]);
arab-=(arab/100)*100;
szamjegy--;
}
if(szamjegy==2)
{
strcat(romai,tizesek[arab/10-1]);
arab-=(arab/10)*10;
szamjegy--;
}
if(szamjegy==1)
{
strcat(romai,egyesek[arab-1]);
}
printf("A romai szam: %s\n", romai);
}
else printf("\n4000 alatti szamot adj meg!");
getchar();
}

Sk8erPeter

(#1539) Jester01 válasza Sk8erPeter (#1538) üzenetére


Jester01
veterán

Elfelejtetted inicializálni a romai tömböt. Márpedig strcat hívása ilyen esetekben rosszat jelent. Nem ellenőrizted, hogy a scanf-nek sikerült-e beolvasni valamit egyáltalán (persze azt sem, hogy esetleg csak egy része volt értelmes a bemenetnek). Valamint hiányzik egy return 0; a végéről.

Egyébiránt pár oldallal korábban már volt itt ilyen kód :K

Jester

(#1540) Sk8erPeter válasza Jester01 (#1539) üzenetére


Sk8erPeter
nagyúr

Mindegyikben igazad van. :K Késő volt :B Köszi, hogy szóltál! :R
A bemeneti adatok ellenőrizgetésével azért nem foglalkoztam, mert most csak a program megírására helyeztem a hangsúlyt, persze ettől függetlenül szükséges.
Amúgy ahogy teszteltem, jól működik a progi, azt csinálja, amit kéne.

"Egyébiránt pár oldallal korábban már volt itt ilyen kód :K"
Most rákerestem, erre gondoltál? Akkor már nem tömörebb (persze nem tökéletes) az enyém? :D

Sk8erPeter

(#1541) cucka válasza Sk8erPeter (#1540) üzenetére


cucka
addikt

Akkor már nem tömörebb (persze nem tökéletes) az enyém?
..és még mindig nem eléggé tömör :D .

(#1542) Sk8erPeter válasza cucka (#1541) üzenetére


Sk8erPeter
nagyúr

Igen, ez igaz :D Most épp nem jut eszembe a jobb tömörítés módja... :B Ötlet?

Sk8erPeter

(#1543) Karma válasza Sk8erPeter (#1542) üzenetére


Karma
félisten

Egy char*** a szövegek tárolására, melyet a szamjegy-gyel indexelsz (persze 0-ra redukálva) okosan, így nem kell minden egyes számjegyhez if-et írni?

“All nothings are not equal.”

(#1544) bpx válasza Sk8erPeter (#1542) üzenetére


bpx
őstag

a teljesség igénye nélkül:

char* romai[4][10] = {
{"", "I","II","III","IV","V","VI","VII","VIII","IX"},
{"", "X","XX","XXX","XL","L","LX","LXX","LXXX","XC"},
{"", "C","CC","CCC","CD","D","DC","DCC","DCCC","CM"},
{"", "M","MM","MMM", "/(IV)", "/(V)", "/(VI)", "/(VII)", "/(VIII)", "/(IX)"}};

int arab, szamjegy;

printf("Az arab szam: ");
scanf("%d",&arab);

for(int helyiertek = 3; helyiertek >= 0; helyiertek--)
{
szamjegy = (int)(arab / pow(10.0, helyiertek));
printf("%s", romai[helyiertek][szamjegy]);
arab -= (int)(szamjegy * pow(10.0, helyiertek));
}

még a tízezres/százezreseknek is van római megfelelője, de azt most hagyjuk :D

[ Szerkesztve ]

(#1545) Jester01 válasza bpx (#1544) üzenetére


Jester01
veterán

for(helyiertek = romai + 3, hatvany = 1000; arab > 0; helyiertek--, hatvany /= 10)
{
div_t d = div(arab, hatvany);
arab = d.rem;
fputs((*helyiertek)[d.quot], stdout);
}

Jester

(#1546) Sk8erPeter válasza bpx (#1544) üzenetére


Sk8erPeter
nagyúr

Ezt nem értem, ez micsoda?
{"", "M","MM","MMM", "/(IV)", "/(V)", "/(VI)", "/(VII)", "/(VIII)", "/(IX)"}
A végén mik ezek a "/(IV)", "/(V)",, stb.? :F
Vagy ezeket csak azért tetted oda, hogy "kitöltsék" a tömböt?

"még a tízezres/százezreseknek is van római megfelelője"
És az micsoda? Tényleg érdekelne. :)

Egyébként tényleg szebb, tömörebb. :K :R

Amúgy minket a pow függvénytől igencsak óva intettek, a következő indokkal:
[link]
"Az se érjen meglepetésként senkit, hogy ha egész szám egész hatványát pow függvénnyel számolja ki, akkor egy halálfejet talál a feladata mellett. 2 az n-ediken-t így számoljuk: ketto_az_n_ediken=1<<n;, nem pedig hatványozással! Ha nem kettő hatványát számoljuk, azt meg lehet oldani szorzással. A pow függvény double értéket ad vissza, ami akkor is lehet pontatlan, ha egész számokat hatványozunk, mert a pow az exp és a log függvények segítségével számol hatványt. Így előfordulhat, hogy ha pl. 8 lenne az eredmény, 7.99999-et ad, és ez int-ként használva bizony csak 7."

___________________________________________________________________

(#1545) Jester01: ha az #include <stdlib.h> sort hozzáadom, CodeBlocks akkor is fordítási hibát dob. A helyiertek változónak milyen típust kellene adni (hogy ne dobjon cannot convert `char* (*)[10]' to ... kezdetű hibát)?
fputs((*helyiertek)[d.quot], stdout); sorra pedig ezt a hibát adja:
invalid type argument of `unary *',
persze ha változtatok a típusdeklaráción, akkor más jellegű hibát ad.

Amúgy még ez a rész számomra nem tiszta:
helyiertek = romai + 3,
a romai változó egy karaktertömb, ami tárolja a római számokat, most annak a 0. eleméhez miért adsz hozzá 3-at? :F

[ Szerkesztve ]

Sk8erPeter

(#1547) 3man


3man
csendes tag

.

[ Szerkesztve ]

(#1548) bpx válasza Sk8erPeter (#1546) üzenetére


bpx
őstag

/ a felső vonal, és azért raktam zárójelbe, hogy összeolvasva egyértelmű legyen hogy mire vonatkozik

egyébként: [link]

[ Szerkesztve ]

(#1549) Sk8erPeter válasza bpx (#1548) üzenetére


Sk8erPeter
nagyúr

Valóban, ezt még nem láttam. Mindenesetre elég idiótán különböztették meg a rómaiak. :D

Sk8erPeter

(#1550) Jester01 válasza Sk8erPeter (#1546) üzenetére


Jester01
veterán

A típust merő gonoszságból direkt hagytam le, hogy legyen min gondolkodni ha valaki akar. De sajnos a te fordítód megmondja :O , ott van a hibaüzenetben: char* (*)[10] Ez kiolvasva azt jelenti, hogy olyan pointer ami egy tíz elemű string tömbre mutat. Vagyis gyakorlatilag a romai mátrix egy sorára. És azért adok hozzá 3-at mert visszafelé megyünk benne tehát az utolsó sorral kezdünk. Ha átrendeznénk a sorokat akkor értelemszerűen ez nem is kellene.

Jester

Copyright © 2000-2024 PROHARDVER Informatikai Kft.