Fontos linkek a C-ről:
Prog.hu-s cikkek
Prog.hu-s tudástár témák
The C Library Reference Guide
Standard C
Wikipedia
C Tutorial
Programming in C
Bevezetés a C programozási nyelvbe
Gyorskeresés
Legfrissebb anyagok
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
- Tudástár AMD Radeon undervolt/overclock
- Tudástár RTX3070 16 GB VRAM-mal?
Általános témák
LOGOUT.hu témák
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [Mr.Jesus:] RTX VSR: a fícsör, amiről senki sem beszél
- [Re:] [Evil Snowman:] Egér bemutató - Keychron M1 Wireless
- [Re:] PLEX: multimédia az egész lakásban
- [Re:] Autóvásárlás Németországban
- [Re:] eBay-es kütyük kis pénzért
- [Re:] [Tamás88:] 2025 a PC-s szemétdombok éve lesz?
- [Re:] [aquark:] Milyen „light” RPG-t ajánlanátok kezdőnek?
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [Luck Dragon:] Asszociációs játék. :)
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Téma összefoglaló
- Utoljára frissítve: 2014-04-25 14:12:00
LOGOUT.hu
Hozzászólások
odonye
csendes tag
http://www.eet.bme.hu/publications/e_books/progr/cpp/node2.html <-- Google-ban nem volt nehéz ezt megtalálni.
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)
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
szilu84
tag
huh ennek nagyon nummat szaga van, nem irigyellek
Benmartin
senior tag
és pontosan miben segítsünk, hol akadtál el?
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
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 ]
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?
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]
Noobi
tag
Köszönöm a segítséget! ...hát igen, normális keresőszavakkal tényleg
[ Szerkesztve ]
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
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.
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
Facek
csendes tag
tudtommal nem kell & jel a karakterek beolvasasanal, vagy hasznalj gets(b); -t
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
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.
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
PazsitZ
addikt
[link]
fgets - sortonként olvasásás
fgetc - karakterenként beolvasás
- http://pazsitz.hu -
Gergello
addikt
Köszi a gyors válaszokat!
Esetemben az fgets kellet volna használni
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.
Benmartin
senior tag
és hol akadtál el, mi a baj?
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. :-(
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();
}
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;
}
szilu84
tag
biztos jó a kód, csak a clrscr(); sor nem kell bele, mert az nincs az ansi c-ben
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
PazsitZ
addikt
[link]
Itt egy ikerprím-es prog. Nem a legszebb a kód, de működik . Nem tudom megfelel-e a Kernighan-Ritchie parancsoknak
- http://pazsitz.hu -
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);
}
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
mm00
aktív tag
Szerintem örül, ha már be tud adni valamit
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.
doc
nagyúr
ez a tanerő hülye
[ Szerkesztve ]
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.
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;}
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
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
''Gee, Brain, what do you want to do tonight?'' ''The same thing we do every night, Pinky: Try to take over the world!''
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;
}
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.
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
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;
}
mm00
aktív tag
Én is info-s vagyok
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
}"
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
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.
mm00
aktív tag
Próbáld meg nála az utolsó forráskódot... hátha...
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
Benmartin
senior tag
hmm, ezt jó tudni. köszi.
Téma tudnivalók
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
Mai Hardverapró hirdetések
prémium kategóriában
- LG UltraWide 38WN95C-W Monitor 1 év Garancia
- iMac 2017 27" Retina 5K CTO / i7 4.2 GHz / 40 GB DDR4 / 1 TB SSD + doboz
- iMac 2017 27" Retina 5K CTO / i5 3.8 GHz / 40 GB DDR4 / 1 TB SSD / Radeon Pro 580 8 GB + doboz
- iMac 2017 27" Retina 5K CTO / i7 4.2 GHz / 40 GB DDR4 / 500 GB SSD / Radeon Pro 575 4 GB + doboz
- MacBook Pro 14 M3 Pro, Space Black, 18 GB RAM, 512 GB SSD Bontatlan