Hirdetés

2024. március 29., péntek

Gyorskeresés

Hozzászólások

(#351) odonye


odonye
csendes tag

http://www.eet.bme.hu/publications/e_books/progr/cpp/node2.html <-- Google-ban nem volt nehéz ezt megtalálni.

(#352) Wizardmon válasza Lortech (#350) üzenetére


Wizardmon
csendes tag

Köszi szépen a helpet.

odonye-nek válasz:
Ezt én is megtaláltam, de a fordító működéséhez nincs benne leírás. (vagy csak én nem találtam)

(#353) Noobi


Noobi
tag

Sziasztok! Tudna nekem valaki segíteni 2 feladat megoldásában? A határidő sürget, mivel holnap már be kell mutatni, és nagyon nem megy... :((( de ha valaki mégis segítene, azt nagyon köszönöm!

1., Készítsünk a másodfokú egyenlet megoldására programot. Számítsuk ki a programmal az (x-10.0^i)*(x-1.0)=0.0 másodfokú egyenlet gyökeit az i=1,2,3,...értékekre. Figyeljük meg a kisebbik gyökként előállított értékeket. A hiba oka: a nagyon kis gyökök relatív hibája nagy, különösen akkor, ha az egyenlet két gyöke abszolút értékben jelentősen eltér egymástól. Ilyenkor ugyanis "a" is, és "c" is kicsi "b"-hez képest, s ezért b és sqrt(b^2-4*a*c) közel azonos értékű. A korlátozott pontosság következtében e két érték különbségének nagy lesz a relatív hibája. Jobb eredményt kapunk, ha a megoldóképlettel ekvivalens megoldóképlettel ekvivalens x1= -((2*c/b)/(1+sqrt(1-(4*a*c/b^2)))) x2= -(c/a*x1) képletek alapján határozzuk meg a gyököket, ahol abszolút értékét tekintve x1 a kisebik és x2 a nagyobbik gyök. Szóval valahogy szemléltetni kellene az egyik és a másik képlet által generált megoldásokat

2., a C hogyan ábrázolja a memóriában a számokat fixpontosan és lebegőpontosan... szóval azt kellene valahogy kiíratni, hogy tárolódik ez a memóriában... pl hexában a 12, -1.05 stb... számok...

Bocsi, hogy beírtam, de tanácstalan vagyok :U

(#354) szilu84 válasza Noobi (#353) üzenetére


szilu84
tag

huh ennek nagyon nummat szaga van, nem irigyellek :(

(#355) Benmartin válasza Noobi (#353) üzenetére


Benmartin
senior tag

és pontosan miben segítsünk, hol akadtál el?

(#356) Noobi válasza Benmartin (#355) üzenetére


Noobi
tag

Az egyenletesnek már az elején.......
A memóriásra van két variációm, de sztem nem jó...

var1:
#include<conio.h>
#include <iostream>
using namespace std;
main()
{
int i = 1024;
float f = -1.2;

printf("A %d erteke a memoriaban: %p\n",i, i);
printf("A %f erteke a memoriaban: %p\n",f, f);

getch();
}

de ennél kicsit "sántít" a lebegőpontos....

var2:
#include <stdio.h>
#include <conio.h>
int main()
{
int n;
float m;
printf("Kerem a \/fixpontos\/ szamot: ");
scanf("%d", &n);
printf("Fixpontosan: ");
char *p = (char *) (&n);
for (int i = 0; i < sizeof(int); ++i, ++p)
{
printf("%02X ", (int) (unsigned char) (*p));
}
getch();

{
printf("\nKerem a \/lebegopontos\/ szamot: ");
scanf("%f", &m);
char *p = (char *) (&m);
for (int i = 0; i < sizeof(float); ++i, ++p)
{
printf("%02X ", (int) (unsigned char) (*p));
}
getch();
return 0;
}
}
Nah így állok.... nem tudom hogy melyik lenne az elfogadható..... de a másodfokúshoz hozzá sem tudok fogni :(

(#357) Benmartin válasza Noobi (#356) üzenetére


Benmartin
senior tag

[link], pedig jól működik, megjegyzem nagyon ismerős a program, mintha már láttam volna máshol is.

mod:
using namespace std c programban? c-ben nincs, és itt pedig szükség sincs rá.

[ Szerkesztve ]

(#358) Noobi válasza Benmartin (#357) üzenetére


Noobi
tag

Az lehet, hogy láttad :) ...igen ez már ++os project volt... szóval mindkét variáció jó?
És a másodfokús feladat hogy legyen?

(#359) Benmartin válasza Noobi (#358) üzenetére


Benmartin
senior tag

nem, az első variáció nem jó, ott a pointer addressét íratod ki. nem véletlenül küldtem a linket, amiben megnézik a 13.625 ábrázolását, így le tudod ellenőrizni. másodfokú egyenlet megoldására meg rengeteg példaprogram van, csak szét kell nézni: [link]

(#360) Noobi válasza Benmartin (#359) üzenetére


Noobi
tag

Köszönöm a segítséget! :R ...hát igen, normális keresőszavakkal tényleg :)

[ Szerkesztve ]

(#361) djszapi


djszapi
csendes tag

sziasztok!
az a kérdésem van, hogy soros porton keresztül gsm modulra kellene küldenem üzenetet, nyilván at parancsok segítségével hogy üzenetet küldjön a modul egy telefonra bizonyos feltételek teljesülésekor.
a kérdésem az hogy az elküldött szövegbe hogy tudom beleszúrni a nem nyomtatható, vezérlő karaktereket? enterre, meg a ctrl+z-re gondolnék.
enter vmi ilyesmi hogy \n, de a cntrl+z-nek a char alakja SUB, hexa meg decimalis alakja meg nem egeszen jo megoldas volt eddig...

közsi: Laci

(#362) Wizardmon


Wizardmon
csendes tag

heló!
Mi a problémája ennek a programnak?

#include <stdio.h>
main ()
{
int a;
char b;
printf("Kerek egy egesz szamot: ");
scanf("%d",&a);
printf("Kerek egy betut: ");
scanf("%c",&b);
printf("a=%d es b=%c",a,b);
}

A számot beolvassa, de a betűvel gondjai vannak. Vagy nem enged semmit beírni, vagy átugorja és egyből kiírja hogy pl: a=3 es b=
Vagy ha a program jó, akkor a fordítóval lehet a baj? Mert C++ fordítóm van, a könyv meg amiből tanulgatok sima C könyv.

(#363) Lortech válasza Wizardmon (#362) üzenetére


Lortech
addikt

scanf("%1s", &b);

Bennemarad az inputban az előző beolvasásból az enter és azt húzza be a karakter beolvasásánál.

scanf(" %c",&b) is jó (szóköz a c előtt), de ez csak egy db white-spacet küszöböl ki.
Ha pl. azt írod, hogy számnak, hogy:
1 szóközszóközszóköz akkor már nem jó.

Thank you to god for making me an atheist

(#364) Facek válasza Wizardmon (#362) üzenetére


Facek
csendes tag

tudtommal nem kell & jel a karakterek beolvasasanal, vagy hasznalj gets(b); -t

(#365) Lortech válasza Facek (#364) üzenetére


Lortech
addikt

Mivel a scanf második paramétere egy mutató, ahova /ahonnan kezdve az stdinből az input bekerül, ezért kell a & ezesetben, mivel sima char típus. Ha char * lenne, akkor nem kéne.

Thank you to god for making me an atheist

(#366) Gergello


Gergello
addikt

Ilyen felépítésű szöveges fileból hogy lehet beolvasni?

Példa:

5 4 12345
das d as d ad
3 1 56565
gfdgd fgd asd asd gggg

fscanf(f,"%d %d %s",......) ezzel beolvasom az első sort ez oké
a második sort ezzel próbálnám fscanf(f,"%s"....) ,de ez ugye csak az első szóközig olvassa be. Mindez egy for ciklusban van.

(#367) doc válasza Gergello (#366) üzenetére


doc
nagyúr

lehet fscanf-fel is, és a végén összerakosgatod egy stringbe, de egyszerűbb ha rákeresel a getline függvényre

(#368) PazsitZ válasza Gergello (#366) üzenetére


PazsitZ
addikt

[link]
fgets - sortonként olvasásás
fgetc - karakterenként beolvasás

- http://pazsitz.hu -

(#369) Gergello


Gergello
addikt

Köszi a gyors válaszokat!
Esetemben az fgets kellet volna használni :W

(#370) Bettina87


Bettina87
csendes tag

Sziasztok!

Egy kis segítségre lenne szükségem. Konkrétan egy programot kéne megírni az alábbi három közül. Nagyon hálás lennék ha segítenétek nekem, mert én totál béna vagyok és az idő is sürget mert júni 6-ig kéne. Csak Kernighan-Ritchie C nyelven fogadja el a tanár, másban nem.
Ezekből lehet választani:

1. r2d római-szám

A parancs a parancs sorban egy római számot (vagy római számok
szóközökkel elválasztott sorozatát) vár(ja), amely(ek)nek kiírja
decimális 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.

2. d2r decimális-szám

A parancs a parancs sorban egy decimális számot (vagy decimális számok
szó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.

3. twins decimális-szám

A parancs a parancs sorban egy decimális számot vár, és az
[1, decimális-szám] zárt intervallumba eső ikerprímeket írja
ki 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.

Ha valaki meg tudna oldani nekem egyet és elküldené az e-mail címemre, nagyon hálás lennék.

(#371) Benmartin válasza Bettina87 (#370) üzenetére


Benmartin
senior tag

és hol akadtál el, mi a baj?

(#372) Bettina87


Bettina87
csendes tag

Szia!

Az a baj, hogy egyiket sem tudom megcsinálni, volt kemény 3 órám belőle, ami alatt nem igazán sikerült elsajátítani a dolgokat, és sajna a többieknek sem megy. Még egy rossz programnak is örülnék, ami Kernighan-Ritchie C-ben írodott. Szóval nem gáz, ha nem fut le, bár ti biztos nagyon értetek ehhez, én majd pár év múlva talán, ha majd belemélyedek a programozás rejtelmeibe.
Szóval roppant nagy segítségre szorulok jelenleg. :-(

(#373) mm00 válasza Bettina87 (#372) üzenetére


mm00
aktív tag

Tessék, egy alapnak jó lesz (google) :)

#include<stdio.h>

main()
{
int a,b,c,d,e;
clrscr();
printf("Input a number (between 1-3000):");
scanf("%d",&e);
while (e==0||e>3000)
{
printf ("ERROR: Invalid Input!
");
printf ("Enter the number again:");
scanf ("%d",&e);
}
if (e>3000)
printf("Invalid");
a = (e/1000)*1000;
b = ((e/100)%10)*100;
c = ((e/10)%10)*10;
d = ((e/1)%10)*1;

if (a ==1000)
printf("M");
else if (a ==2000)
printf("MM");
else if (a ==3000)
printf("MMM");

if (b == 100)
printf("C");
else if (b == 200)
printf("CC");
else if (b == 300)
printf("CCC");
else if (b == 400)
printf("CD");
else if (b ==500)
printf("D");
else if (b == 600)
printf("DC");
else if (b == 700)
printf("DCC");
else if (b ==800)
printf("DCCC");
else if (b == 900)
printf("CM");


if (c == 10)
printf("X");
else if (c == 20)
printf("XX");
else if (c == 30)
printf("XXX");
else if (c == 40)
printf("XL");
else if (c ==50)
printf("L");
else if (c == 60)
printf("LX");
else if (c == 70)
printf("LXX");
else if (c ==80)
printf("LXXX");
else if (c == 90)
printf("XC");

if (d == 1)
printf("I");
else if (d == 2)
printf("II");
else if (d == 3)
printf("III");
else if (d == 4)
printf("IV");
else if (d ==5)
printf("V");
else if (d == 6)
printf("VI");
else if (d == 7)
printf("VII");
else if (d ==8)
printf("VIII");
else if (d == 9)
printf("IX");
getch();
}

(#374) mm00 válasza mm00 (#373) üzenetére


mm00
aktív tag

Egy másik, ez függvénybe :)

// written by Ste Cork, free for any and all use.
//
const char *Number_AsRomanString( int iNumber )
{
struct RomanDigit_t
{
char *m_psString;
int m_iValue;
};

static const RomanDigit_t RomanDigits[]=
{
{"M", 1000},
{"CM", 900},
{"D", 500},
{"CD", 400},
{"C", 100},
{"XC", 90},
{"L", 50},
{"XL", 40},
{"X", 10},
{"IX", 9},
{"V", 5},
{"IV", 4},
{"I", 1},
};

// Strictly speaking, Roman digits can't display something
// such as 4999 without using overlaid bars and so forth,
// but for now this is a quick-and-dirty piece of code that'll
// just keep using M's...
//
static char sRomanString[20];
sRomanString[0] = '\0';

for (int i=0; iNumber && i<sizeof(RomanDigits)/
sizeof(RomanDigits[0]); i++)
{
while ( RomanDigits[i].m_iValue <= iNumber )
{
strcat( sRomanString, RomanDigits[i].m_psString );
iNumber -= RomanDigits[i].m_iValue;
}
}

return sRomanString;
}

(#375) szilu84 válasza mm00 (#373) üzenetére


szilu84
tag

biztos jó a kód, csak a clrscr(); sor nem kell bele, mert az nincs az ansi c-ben

(#376) Bettina87


Bettina87
csendes tag

köszönöm a segítséget, egyetlen egy gondom van, hogy ansi c-t nem fogad el a tanár, csak a Kernighan-Ritchie C-s parancsokat.
ha van még valakinek ötlete, hatalmas örömmel fogadom :)
Előre is köszönöm

(#377) PazsitZ válasza Bettina87 (#376) üzenetére


PazsitZ
addikt

[link]
Itt egy ikerprím-es prog. Nem a legszebb a kód, de működik :B . Nem tudom megfelel-e a Kernighan-Ritchie parancsoknak :(

- http://pazsitz.hu -

(#378) mm00 válasza Bettina87 (#376) üzenetére


mm00
aktív tag

Na összehoztam neked, szerintem ez meg fog felelni :)

#include<stdio.h>
#include <ctype.h>
#define HSZ sizeof(int)/sizeof(short)*5

int getch(void);
void ungetch(int);
int getint(int *);

int main(int argc, char *argv[]) {
int i = 0;
int dec;
char rom[50];
getint(&dec);

printf("%d\n\n", dec);
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);

}

int getint(int *pn)
{
int c=0, sign, ok=0, numdb;
double d;
while(!ok && c!=EOF)
{
while(isspace(c=getch()));
sign = 1;
if(c=='+'||c=='-')
{
sign=(c=='+')?1:-1;
c=getch();
}
for(d=0., numdb=HSZ; numdb-->0&&isdigit(c);c=getch())
{
d=10.*d+c-'0';
ok = 1;
}
d*=sign;
while(!isspace(c)&&c!=EOF)
{
c=getch();
ok = 0;
}
else
*pn=d;
}
if(c!=EOF)ungetch(c);
return(c);
}

(#379) doc válasza Bettina87 (#376) üzenetére


doc
nagyúr

a K-R-féle C lényegében az ANSI
a clrscr meg szerintem a világ egyetlen szabványával sincs köszönőviszonyban sem :D

(#380) mm00 válasza doc (#379) üzenetére


mm00
aktív tag

Szerintem örül, ha már be tud adni valamit :)

(#381) Bettina87


Bettina87
csendes tag

Eszméletlen rendesek vagytok, hogy segítetek

A legelsőt amit küldtél (373. hozzászólás) elküldtem a tanárnak, és visszadobta, hogy nem egészen ez volt a feladat kiírása.

Ezt a kis szösszenetet is mellékelte:
"Írjunk C programot (Kernighan-Ritchie C), amellyel az alábbi UNIX környezetben
végrehajtható parancsok valamelyikét valósítja meg. A választott parancsot
megvalósító programnak a parancs végrehajtásához szükséges információt a
parancssorból kell átvennie a „Hanoi Tornyai” játékot megvalósító
példaprogramban található módon. Az egészszám parancs argumentum átvételéhez az
int atoi(s)
char *s;
könyvtári függvényt használhatják ugyancsak a fent idézett példaprogramban látható módon.
Fontos: ANSI C, C++ forráskódú megoldások nem értékelhetők. "

Totál kiakaszt, eddig mindenkiét visszaküldte, akiket ismerek, szóval roppant kedves és megértő emberke.

Azért próbálkozom a többivel is, hátha valamelyiket elfogadja. Remélem legalábbis.

(#382) doc válasza Bettina87 (#381) üzenetére


doc
nagyúr

ez a tanerő hülye :DDD :W

[ Szerkesztve ]

(#385) Bettina87


Bettina87
csendes tag

Az elsőzőt küldtem el neki, kiváncsi leszek erre mit ír vissza.
Nagyon szépen köszönöm a segítséget, majd írok hogy ezekre mit reagált. Remélem ez már jó lesz neki valamilyen szinten.

(#386) mm00 válasza Bettina87 (#385) üzenetére


mm00
aktív tag

ÁÁÁ hibáztam :) sorry

Ez a jó leteszteltem most :)

#include<stdio.h>
#include <stdlib.h>

int egesze(char[]);

int main(int argc, char *argv[]) {
int i = 0, x=0;
int dec;
char rom[50];
if(argc == 1){
perror("Hianyzik a parameter!");
}

for(x=1;x<argc;x++){
if(egesze(argv[x])){
dec = atoi(argv[x]);
}else{
perror("A parameterlistaban nem megfelelo az egyik ertek!");
}

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);
}
}

int egesze(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;}

(#387) Bettina87


Bettina87
csendes tag

Elküldtem neki az utolsót, amit küldtél, és ezt küldte vissza:

"Ez egy picivel jobb, mint az előző, de nem KR (Kernighan-Ritchie) C-ben van.
Ha elküldi a KR C változatát, és levelében elmagyarázza nekem, hogy miért a perror rendszer függvényt hívja, akkor teljesen jó lesz."

Az a gász, hogy fogalmam sincs hogy mit mire kéne kicserélni. Elvileg jó, meg minden, csak nem KR C. Bár részemről ezt is lepontozhatná, a lényeg hogy ne buktasson meg, de ez még mindig nem felel meg neki.

Lenne esetleg ötletetek hogy mit kéne változtatni?

ha szépen megkérlek titekt, azt is leírnátok hogy miért a perror rendszer függvényt hívja

aztán ígérem nem zaklatlak titeket többet, vasárnapig kell leadni.

Bár nektek ez jobban megy mint nekem. :)

köszi mindenkinek aki segít

(#388) shev7 válasza mm00 (#386) üzenetére


shev7
veterán

utananeztem a perrornak, es ahogy nezem ennek az a lenyege, hogy egy globalis valtozo tarolja, hogy a program futtatasa soran milyen hiba lepett fel, es a parameterul adott string utan kiirja. Tehat teszem azt, ha az atoi-t ugy probalnad meghivni, hogy elotte nem ellenorzod le hogy konvertalhato-e szamma a string, akkor ha hiba tortent, beallitana az errno nevu globalis valtozot (hivas elott erdemes nullazni, es includolni kell az errno.h-t) Ha az atoi hivas utan ellenorzod, hogy az errno erteke 0. Ha nem, akkor hivsz egy perror-t ami kirna a szoveget, meg az errno hibakodnak megfelelo szoveget. De mivel te mindig leellenorzod, hogy a szam konvertalhato-e, a program futasa soran sosem kap rossz parametert, sosem fog az errno erteke megvaltozni, ezert a perror hivas ebbol a szempontbol felesleges, irhatnal egybol a stderr-re is.

Visszaterve a temara: mivel fogalmam sincs mi az ami Kernighan-Ritchie C es mi az ami nem, fogalmam sincs mi a baja. De ha perror-t lehet hasznalni Kernighan-Ritchie C-ben, akkor lehet, hogy arra gondol a tanero amit fennt levezettem mert akkor az lehet hogy Kernighan-Ritchie-sebb :D

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

(#389) mm00 válasza shev7 (#388) üzenetére


mm00
aktív tag

Hát nem tudom mit várhat a tanár.... Talán ez "Kernighan-Ritchie" kód... átnéztem egy hivatalos Richie könyvbe... Ha ilyen tanárom lenne nem kicsit szidnám...

#include <stdio.h>


int egesze(char[]);
int atoi(char[]);

int main(int argc, char *argv[]) {
int i = 0, x=0;
int dec;
char rom[50];
if(argc == 1){
fprintf(stderr, "Hianyzik a parameter!");
}

for(x=1;x<argc;x++){
if(egesze(argv[x])){
dec = atoi(argv[x]);
}else{
fprintf(stderr, "A parameterlistaban nem megfelelo az egyik ertek!");
}

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);
}
}


int egesze(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(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;
}

(#390) Bettina87


Bettina87
csendes tag

Ne is mondd. Eddig még azokét is visszadobta, akiknek infósok csinálták meg. Szóval túl sok embernek nincs meg.

Nagyon szépen köszönöm az újabb verziót, remélem ez már jó lesz neki, már ki vagyok akadva rá teljesen.

(#391) Bettina87


Bettina87
csendes tag

nah, erre meg ezt írta vissza.

Kedves Kollegina!

Nagyon köszönöm a részletes leírást a perror függvényről. Csak zárójelben jegyzem meg, hogy az atoi() függvény sohasem ad hibát, de ez semmit nem von le a perror-ról szóló leírásából.
Az elküldött program azonban még mindig nem KR C-ben van. A feladatok kiírásában feltételként szerepel, hogy sem ANSI C, sem C++ kódot nem fogadok el. A KR C-ben a függvények deklarálásakor csak az értékkészlet deklarációja szerepel. Hogy hány változós a függvény és hogy milyen típusúak az egyes változók, az nem.
Az
int main(int argc, char*argv[])
{
...
}
függvény definíció például ANSI C, de a C++ ugyanezt a szintaxist használja.
Az
int egesze(s)
char *s;
{
...
}
alakú függvény definíció pedig KR C kód. Ezek a fogalmak a gyakorlatokon szerepeltek. Kérem, kűldje el programja KR C változatát, amelyben javítsa ki azokat a program ágakat, ahol hibát detektál, és hibaüzenetet ad. Feltételezem, hogy szándéka szerint a hibaüzenet kiírása után nem akarja, hogy a program tovább fusson.

Szóval mostmár totál kivagyok miatta, kértem hogy írja meg ez így mennyit ér, de arra persze nem válaszolt.
nem tudom miért van belesve annyira a KR C-be, majdnem ugyanaz

(#392) mm00 válasza Bettina87 (#391) üzenetére


mm00
aktív tag

Talán ez:

#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;
}

(#393) mm00 válasza Bettina87 (#390) üzenetére


mm00
aktív tag

Én is info-s vagyok :)

(#394) Benmartin válasza Bettina87 (#391) üzenetére


Benmartin
senior tag

A KR C-ben a függvények deklarálásakor csak az értékkészlet deklarációja szerepel. Hogy hány változós a függvény és hogy milyen típusúak az egyes változók, az nem.

Szerintem ez így nem igaz, vagy nekem nem egyértelmű.

The C programming Language
By Brian W. Kernighan and Dennis M. Ritchie.
Chapter 4 - Functions and Program Structure:

"Each function definition has the form
return-type function-name(argument declarations)
{
declarations and statements
}"

(#395) Lortech válasza Benmartin (#394) üzenetére


Lortech
addikt

Ez a második kiadása a könyvnek, ami már ansi c -t tárgyalja, nem a hagyományos K&R C-t.

Thank you to god for making me an atheist

(#396) Bettina87


Bettina87
csendes tag

Ne értsd félre az info-s dolgot, nem rosszindulatból mondtam. Csak azokét dobja vissza, akik már fél lábbal kinnt vannak az egyetemről, és ők már mélyebb programozási ismeretekkel rendelkeznek. Nem értem, hogy miért kell ennyire belemélyedni ebbe a verzióba, mikor valószínű nem is ezt fogjuk venni a továbbiakban.
Kissé furi az egész rendszer minálunk.

Az a bajom, hogy megcsinálja másnak is egy olyan ember, aki igazán ért hozzá, de a tanárnak nem felel meg. Nem tudom mit vár tőlünk.

(#397) mm00 válasza Bettina87 (#396) üzenetére


mm00
aktív tag

Próbáld meg nála az utolsó forráskódot... hátha...

(#398) sghc_toma válasza Bettina87 (#396) üzenetére


sghc_toma
senior tag

azt várja, hogy az eredeti (értsd: első kiadású) KR könyvben leírtak alapján írjátok meg a házit.. a bekopizott válaszlevele alapján KR-féle kódokat írtatok órán is.. gyakorlatilag visszakéri, amit tanultatok..
félreértés ne essék: nem értem miért kell egyáltalán tanítani a KR C-t.. nekem kellett Fortran-t tanulnom, utáltam, és tudtam, hogy gyakorlatilag semmi hasznát nem veszem majd.. ennek ellenére az órai anyag alapján mindig megírtam a házit..
nem hinném, hogy embertelen feladat lenne egy problémát KR C-ben megírni, csak ehhez ugye ismerni kéne a nyelvet.. márpedig azt Nektek megtanították, vagy mi...

in asm we trust

(#399) Benmartin válasza Lortech (#395) üzenetére


Benmartin
senior tag

hmm, ezt jó tudni. köszi.

(#400) szilu84 válasza Bettina87 (#391) üzenetére


szilu84
tag

nem túl rugalmas tanárotok van :DDD

Copyright © 2000-2024 PROHARDVER Informatikai Kft.