- Luck Dragon: Asszociációs játék. :)
- M0ng00se: Hardvert áruhitelre?
- sziku69: Szólánc.
- sziku69: Fűzzük össze a szavakat :)
- f(x)=exp(x): A laposföld elmebaj: Vissza a jövőbe!
- eBay-es kütyük kis pénzért
- Rap, Hip-hop 90'
- Brogyi: CTEK akkumulátor töltő és másolatai
- bitpork: MOD Júni 13 Augusztus 2- szombat jelen állás szerint.
- btz: Internet fejlesztés országosan!
Új hozzászólás Aktív témák
-
válasz
kiskatus #698 üzenetére
Hali!
Na, elkészültem, az elején azonban pár szó...
Ezt úgy írtam ahogy kérted, tehát karakterenként olvas, azonban az ilyen jellegű progikat nem így írják. Ez a progi pár ezer byte-os fájlokon gyorsnak tűnhet, de ha pl 2 darab 50 megás fájl-t kellene összehasonlítania, akkor elidőzhet előtte az ember, a karakteres olvasásnak köszönhetően. A gyors FileComparer progikban dinamikusan lefoglalnak memóriából 2 nagyobb "darabot" a un bufferek számára. Ezekbe a bufferekbe olvassák be az adatokat a fájlokból(nem egyesével, hanem amekkora buffer, mondjuk 4mega) és a két buffert hasonlítják össze, ami nagyon gyors hisz a memóriában van.
Természetesen ezt csak plusz INFO-nak szántam.
Felkommenteztem, remélem érthető is lesz. Persze ha van kérdésed akkor írj nyugodtan.Fire.
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned long ErrorCounter;
unsigned char chFirst, chSecond;
FILE * FirstFileAsBinary;
FILE * SecondFileAsBinary;
FILE * ErrorFileAsText;
printf("Binaris osszehasonlitas\n\n");
//első fájl megnyitása binárisan
//minden fájl megnyitásakor kötelező a hibaellenőrzés!
if (!(FirstFileAsBinary = fopen("first.txt","rb"))) {
//nem sikerült megnyitni az első fájlt, ezért hibakiírás, kilépés
fprintf(stderr,"Nem lehet megnyitni a 'first.txt' fajlt...");
exit(-1);
}
//második fájl megnyitása binárisan
//minden fájl megnyitásakor kötelező a hibaellenőrzés!
if (!(SecondFileAsBinary = fopen("second.txt","rb"))) {
fprintf(stderr,"Nem lehet megnyitni a 'second.txt' fajlt...");
//nem sikerült megnyitni a második fájlt, ezért hibakiírás, kilépés
//de elötte a korábban sikeresen megnyitott első fájlt le kell zárni
fclose(FirstFileAsBinary);
exit(-1);
}
//a fseek a fájlban pozicionál, meg kell adni
//hogy melyik fájlban, egy relatív távolságot, és hogy honnan
//alábbi esetben a FirstFileAsBinary fájlban, a végétől(SEEK_END), 0 bytera
//azaz magyarul a fájl végére pozícionálunk, amit azért teszünk, hogy a továbbiakban
//az ftell függvénnyel(ami az épp aktuális fájlpoziciót adja vissza) meg tudjuk
//határozni a fájl hosszát
fseek(FirstFileAsBinary,0,SEEK_END);
fseek(SecondFileAsBinary,0,SEEK_END);
//megnézzük, hogy a két fájl mérete azonos-e, mivel ha nem
//akkor nincs értelme összehasonlítani őket
if (ftell(FirstFileAsBinary)!=ftell(SecondFileAsBinary)) {
printf("A két fájl mérete nem azonos...");
//nem azonos méretű a két fájl, ezért hibakiírás, kilépés
//de elötte a korábban sikeresen megnyitott első és második fájlt le kell zárni
fclose(FirstFileAsBinary);
fclose(SecondFileAsBinary);
exit(-1);
}
//itt azt ellenőrizzük, hogy ne legyen 0 byte hosszú a fájl, hisz akkor megint csak
//nincs értelme az összehasonlításnak
//azért csak az egyik fájlt ellenőrzöm, mert az előzőekben már kiderült, hogy
//a két fájl egyenlő méretű, és ha az első fájl netalántán 0 byte hosszú
//akkor a második is
if (!ftell(FirstFileAsBinary)) {
printf("A fajlok merete nem lehet 0 byte...");
//0 byte méretű mindkét fájl, ezért hibakiírás, kilépés
//de elötte a korábban sikeresen megnyitott első és második fájlt le kell zárni
fclose(FirstFileAsBinary);
fclose(SecondFileAsBinary);
exit(-1);
}
//most a fájlpoziciót visszaállítom a fájl elejére, azaz 0 byte-ra a fájl elejétől(SEEK_SET)
//azért kell megtenni, mert korábban a fájl végére pozicionáltam
fseek(FirstFileAsBinary,0,SEEK_SET);
fseek(SecondFileAsBinary,0,SEEK_SET);
//létrehozom azt a fájlt szövegesként, amibe az esetleges eltéréseket letároljuk
if (!(ErrorFileAsText = fopen("error.txt","wt"))) {
fprintf(stderr,"Nem lehet megnyitni az 'error.txt' fajlt...");
//nem sikerült létrehozni a fájlt, ezért hibakiírás, kilépés
//de elötte a korábban sikeresen megnyitott első és második fájlt le kell zárni
fclose(FirstFileAsBinary);
fclose(SecondFileAsBinary);
exit(-1);
}
//hibaszámláló nullázása, a későbbiekben használom
ErrorCounter=0;
//az fread függvény (jelen esetben) 1 darab, 1 byte hosszú adatot olvas be
//jelen esetben a chFirst, chSecond változóba, az első ill második fájlból
//a visszatérő értéke olvasás esetén mindig annyi, amennyit megadtunk neki
//jelen esetben 1. Ha nem ennyivel tér vissza, az azt jelenti, hogy a fájl végére értünk
//vagy valamilyen fájlolvasási hiba lépett fel
while (fread(&chFirst,1,1,FirstFileAsBinary)==1) {
fread(&chSecond,1,1,SecondFileAsBinary);
//összehasonlítjuk a két byte-ot
if (chFirst!=chSecond) {
//ha nem egyenlő, akkor kiírjuk az error.txt fájlba, méghozzá a következő módon
//filepozició,chFirst,chSecond
//a filepoziciót 0x-el kezdődő 8 számjegyes hexadecimális számként
//a chFisrt, chSecond pedig 0x-el kezdődő 2 számjegyes hexadecimális számként
fprintf(ErrorFileAsText,"File-pozicio: %#.8lx %#.2x <> %#.2x\n",ftell(FirstFileAsBinary),chFirst,chSecond);
//hibaszámláló növelése
ErrorCounter++;
}
}
//ha a hibaszámláló nem 0, akkor kiírjuk hány eltérés van a két fájl közt
if (ErrorCounter) printf("%lu elteres talalhato a ket fajl kozt.\nNezze meg az 'error.txt' fajl tartalmat...",ErrorCounter);
//ha a hibaszámláló 0, akkor nincs különbség a két fájl tartalma közt
else printf("A ket fajl azonos...");
//mindhárom korábban sikeresen megnyitott fájl lezárása
fclose(FirstFileAsBinary);
fclose(SecondFileAsBinary);
fclose(ErrorFileAsText);
//várakozás ENTER-re
printf("\n\nUsson ENTER-t a kilepeshez...");
getchar();
return 0;
} -
cellpeti
nagyúr
válasz
Fire/SOUL/CD #697 üzenetére
Hát,mert mindent értesz,egyből írod pozitív értelemben értettem!
-
kiskatus
csendes tag
válasz
Fire/SOUL/CD #696 üzenetére
Nagyon szépen köszönöm!!!
Annyit kérhetnék, hogy megjegyzésben nagyjából írd oda, hogy mit miért.
Hátha megértem úgy énis. Mégegyszer nagyon köszönöm! -
-
-
cellpeti
nagyúr
Fire te kész vagy!
-
kiskatus
csendes tag
válasz
Fire/SOUL/CD #693 üzenetére
Szia!
Én is kérdeztem a Tanár Urat, hogy mire gondol és ezt írta e-mailban, hogy: Karakterenként olvassa be a fájlok tartalmát, majd a beolvasott karaktereket hasonlítsa össze! Ha különböznek, akkor írja ki őket egy harmadik fájlba! -
válasz
kiskatus #692 üzenetére
Hali!
Azt írtad, hogy Angol szöveg. Ezt azt jelenti, hogy soronként kell összehasonlítanod?
Tehát pl mindkét fájlban email címek vannak.1.fájl
a@b.cc
b@c.dd
c@d.ee2.fájl
a@b.cc
b@c.XX
c@d.ee3.fájl(kimeneti fájl)
különbség -> b@c.dd <> b@c.XXvagy esetleg byte-onként(binary compare)? Ez esetben teljesen mindegy milyen fájlról van szó, lényegtelen hogy szöveg, kép, hang stb.
Fire.
-
kiskatus
csendes tag
Sziasztok!
Kaptam egy házi feladatot programozásból. Hétfőre kellene a feladat és nem megy a megoldása. Tudnátok segíteni? Mert ha nem lesz meg, megbuktatnak. Előre is köszönöm!
A feladat: Adott két szöveges fájl (angol szöveg). Hasonlítsa össze a tartalmukat. A különbséget írja ki egy harmadik fájlba.
Üdv.: kiskatus -
válasz
babyanigirl #689 üzenetére
Hali!
Na csak meg lett. Olyan kód volt a forrásba, amit a PH is használ formázásra...
#include <stdio.h>
#include <stdlib.h>
//ha többször használod ugyanazt az értket, akkor azt célszerű így definiálni
//így megelőzhető az elgépelésekből adodó hibák
#define MAXCHAR 256
int CharCounter[MAXCHAR];
int main()
{
int i;
//a karakterek(így a betűk, számok, stb) egy byte-on tárolódnak az értékük 0-255 lehet
//ezért nem int típust, hanem unsigned char típust deklarálunk
unsigned char ch;
FILE * TextFileAsBinary;
FILE * OutputTextFile;
printf("Karakter-szamlalo\n\n");
//kinullázzuk a tömbünket. ez azonban jelen esetben teljesen felesleges
//mivel a fórdító automatikusan elvégzi ezt a feladatot. Természetesen ha
//többször kellene használni a tömböt, akkor szükséges lehet az "újranullázás"
for (i=0;i<MAXCHAR;CharCounter[i++]=0);
//minden fájl megnyitásakor kötelező a hibaellenőrzés!
if (!(TextFileAsBinary = fopen("input.txt","rb"))) {
fprintf(stderr,"Nem lehet megnyitni a fajlt...");
exit(-1);
}
//az fread függvény (jelen esetben) 1 darab, 1 byte hosszú adatot olvas be ch-be
//a korábban megnyitott "input.txt" fájlból
//a visszatérő értéke olvasás esetén mindig annyi, amennyit megadtunk neki
//jelen esetben 1. Ha nem ennyivel tér vissza, az azt jelenti, hogy a fájl végére értünk
//vagy valamilyen fájlolvasási hiba lépett fel
while (fread(&ch,1,1,TextFileAsBinary)==1) CharCounter[ch]++;
fclose(TextFileAsBinary);
//kimeneti fájl megnyitása, mindig kérdés nélkül felülírodik!
if (!(OutputTextFile = fopen("output.txt","wt"))) {
fprintf(stderr,"Nem lehet irni a fajlt...");
exit(-1);
}
//itt azért 16-ról indítom a ciklust, mert ez alatt többnyire karakteres vezérlőkódok
//találhatók(return, tab, sipolás, visszatörlés stb), amikor ezeket beleírnád a fájlba
//akkor furcsán mutatna
for (i=16;i<MAXCHAR;i++) {
//csak akkor írok fájlba, ha előfordult az 'i' karakter, ha nem akkor felesleges
if (CharCounter[i]) {
fprintf(OutputTextFile,"Gyakorisága a(z) %c karakternek: %d\n",i,CharCounter[i]);
}
}
fclose(OutputTextFile);
return 0;
}Fire.
-
válasz
babyanigirl #689 üzenetére
Hali!
Jó pár hozzáfűzni valóm lett volna, ezért inkább megírtam és a kommentekben elolvashatod.
Ha valami nem érthető, vagy más kérdésed is lenne, akkor nyugodtan írj, ahogy időm engedi válaszolok. (meg biztosan mások is)
Bocs de nem tudom berakni a kódot csak valami maszat lesz, még próbálkozom.
Fire.
-
babyanigirl
csendes tag
#include <stdio.h>
#pragma hdrstop//---------------------------------------------------------------------------
#pragma argsused
int main( int argc, char* argv[] )
{
int i;
FILE* f;
FILE *fp;
int count[256];for(i=0; i<256; i++)
{
count[i] = 0;
}f = fopen("input.txt", "rt");
while(1)
{
int c = fgetc(f);
if( c==EOF )
break;
if( c<0 || c>255 ) {
printf("hiba: nem vart betu");
return 3;
}count[c] += 1;
}fclose(f);
printf("gyakorisagok:\n");
for(i=0; i<256; i++)
{
if( count[i] < 1 )
continue;printf("'%c': %d-szer\n", i, count[i]);
fp=fopen("output.txt", "a+");
fprintf(fp,"Gyakorisága az");
fprintf(fp,"%c betunek %d\n", i, count[i]);
fclose(fp);
}
system("pause");
return 0;
}Mit gondoltok ez így jó?
Nem lehetne vhogy egyszerűbben megcsinálni?
BabyAniGirl -
cellpeti
nagyúr
CS!
Mondja már el nekem valaki mit jelent ez pl:
if(!getline(szam1,30)) printf("Üres sort adtál be");
ha nem 0ad meg miért mégis üres sor lesz?
A getline 0-t ad vissza!
Akkor ha nem 0-at ad vissza getline(tehát nem üres sort) a szam1,30-re?
Mondom segg hülye vagyok hozzá és jövő kedden vizsgázokA do{ - }while();
magyarul:
csináld{
utasítás
}amíg(feltétel);
A while-ba ugyanazt a feltélet adom meg,mint az elején?
-
Horgi
csendes tag
Sziasztok!
Segítséget szeretnék kérni. A feladatom a következő:
Írjon egy ellenőrző programot, e-mail címek helyességének vizsgálatáhozTipp:a string végigolvasása, majd a talált speciális karakterek ('@' '.') drabszámának feljegyzése. A jó email-címben pontosan egy '@' és legalább egy '.' karakter van.
További ellenőrzés: a '@' nem lehet az első karakter, a '@' előtt és után nem állhat '.', '@' és '.' -ból egymás után nem lehet egynél több.Szükséges libc függvények: printf()
A program a kapott paramétereket kizárólg a main függvény argc, argv[] változóin keresztül veheti át. Semmiféle getchar, scanf és egyéb felhasználói input nem elfogadható!
Előre is köszönöm a segítséget.
-
Benmartin
senior tag
válasz
babyanigirl #680 üzenetére
szia!
először is deklarálj egy darab tömböt, mondjuk úgy 100 elemet, de még annyi sem kell, ezután olvasd be soronként az inputot (fgets), mert így kevesebb a függvényhívás, majd iterálj végig a sor minden karakterén, vond le belőlük a nullás karaktert és növeld a darab tömb ezen indexét (darab[sor[i]-'0']++).
majd kiírásnál, ahol nem nulla a tömb értéke hozzáadod az indexhez a nullás karaktert és kiíratod a tömb értékét.
valahogy így.
-
babyanigirl
csendes tag
Én fél éve tanulok progrmaozást és most kaptam egy olyan házit amit nem nagyon tudok megoldani, és hát szeretnék tőletek egy kis segítséget kérni abban hogy hogy is kezdjem el és hogy kellene megcsinálnom a feladatomat! Bármilyen ötletet, segítséget szívesen fogadok!
Feladat: Írjon programot ami meghatározza egy szöveges állományban szereplő betűk gyakoriságát! Az eredményt írja ki az OUT.txt nevű állományba!#include <stdio.h>
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
FILE *fp=fopen("olvas.txt","r+" );
FILE *f=fopen("ir.txt", "w");
int szam;
char ch,kar;
printf("Az eredeti szoveg: ");
while (!feof(fp)){
ch=fgetc(fp);
printf("%c", ch);
}
printf("\nBetuszamolas vegrehajtasa: i=igen n=nem: ");
scanf("%c",&szam);
if (szam==105) {
fp=fopen("olvas.txt","r+" );
}
}
printf("\n") ;
system("pause");
fclose(fp);
fclose(f);
return 0;
sajnos csak eddig jutottam bekérem a szöveget kiíratom, de hogy utána az" if "után mit kéne írni azt nem tudom, mondjuk gondoltam vmi "sizeof" tömbös karakter számlálásra de vhogy az sem jött össze, mert nem tudtam tömbbe rakni. Látszik, sajnos nagyon amatőr vagyok benne.Előre is köszi minden segítséget!
BabyAniGirl -
mmarta
senior tag
Sziasztok!
C-ben:
Sakkos feladatoknál felrakunk fehér bábukat és egy fekete pl bástyát, akkor hogyan adjuk meg, íratjuk ki, hogy melyik fehér bábut üti pl a bástya?
Uez van lóra és futóra is.
A táblát ki tudom rajzolni, a bábuk is szépen felkerülnek, de az ütési irányokat nem tudom megadni lóra, bástyára, futóra, s a tetejébe még írja is ki -legalább egyet-, hogy melyiknél mit üt.Köszönöm!
-
cellpeti
nagyúr
Sziasztok!
Mi az a parancs,amivel újra tudom indítani a programot???
-
Steve-S
tag
válasz
cellpeti #676 üzenetére
Hi! Itt az én verzióm, bár lehet nem a legtökéletesebb, nem vagyok valami nagy prof C-ből, de működik! Bár lehet már kicsit későn postolom.
Azért remélem segítettem valamit.
#include <stdio.h>
int getline(char t[],int lim)
{
int i;
char c;
for(i=0; i<lim && (c=getchar())!=EOF && c!='\n'; i++)
t[i]=c;
return i;
}
main()
{
int s, i, osszeg, szamok;
char tomb[20];
printf("Adj meg egy 6 szamjegyu kodot: ");
while((s=getline(tomb,20))!=0)
{
osszeg=0;
szamok=0;
if(s>0 && s!=6)
{
printf("A kod nem 6 szambol all!\n");
printf("Adj meg egy 6 szamjegyu kodot: ");
continue;
}
if(s==6)
{
for(i=0; i<6; i++)
if(tomb[i]>='0' && tomb[i]<='9')
szamok++;
}
if(s==6 && szamok!=6)
{
printf("Nem jo a kod, csak szamokat tartalmazhat!\n");
printf("Adj meg egy 6 szamjegyu kodot: ");
continue;
}
if(szamok==6)
{
for(i=0; i<5; i++)
osszeg+=tomb[i]-'0';
}
if((osszeg%6)==(tomb[5]-'0'))
{
printf("Jo a kod!\n");
fflush(stdin);
printf("Adj meg egy 6 szamjegyu kodot: ");
}
else
{
printf("Nem jo a kod!\n");
fflush(stdin);
printf("Adj meg egy 6 szamjegyu kodot: ");
}
}
} -
wiggen123
senior tag
válasz
cellpeti #672 üzenetére
az isalnum a ctype.h ansi c könyvtárban van, ez része minden c implementációnak, szóval nyugodtan használhatod. Itt egy jó referencia: [link]
A feladatodhoz az én verzióm: beolvasni használd a gets() függvényt, az char*-ot ad vissza. menj végig a karaktertömbön amíg össze kell adni őket, vedd ki őket egy 2 hosszú sztringbe, 0. karakter a számjegy 2. a \0, használd az atoi konverziós függvényt hogy számmá alakítsd, így már össze tudod adni őket. A ciklusból kilépve az utolsó számjegyet ugyanígy számmá alakíthatod és ellenőrizheted.
ZH-n érdemes megkérdezni, hogy feltételezheted e, hogy helyesek az input adatok. Tipikusan nem arra kíváncsiak még akkor, hogy ki tudod e szűrni az összes kivételes helyzetet, hanem, hogy az alapokkal tisztába vagy e.
-
Benmartin
senior tag
válasz
cellpeti #667 üzenetére
valami ilyesmi:
#include <stdio.h>
int getline()
{
int sum = 0, i = 0, c, hatodik;
while((c = getchar()) && isalnum(c))
{
sum += c - '0';
hatodik = c - '0';
i++;
}
sum -= hatodik;
if(i != 6 || sum % 6 != hatodik) return 0;
return 1;
}
int main()
{
if(getline())
{
puts("Helyes!");
} else puts("Hibas");
getchar();
return 0;
} -
Jester01
veterán
válasz
cellpeti #664 üzenetére
Pl. kiveszed a 0 lezárást a getline függvényből, mert úgysem kell. Ugyanakkor az i növelését beleteszed a while ciklusba is. Így tehát a függvény legfeljebb 6 karaktert ír a tömbbe (ezzel a túlcsordulás megoldva) és a visszatérési érték alapján pedig a main-ben ellenőrizheted a hosszt (nem kell strlen).
-
-
Jester01
veterán
válasz
cellpeti #658 üzenetére
Igen, a bekért számjegyek tömbjén megy végig, összedva őket. Azért nem <= kell mert a tömbök indexelése 0-val kezdődik. Tehát az első 5 számjegy a 0,1,2,3,4 indexeken van.
A string hosszát valóban az strlen adja meg, de mivel a te beolvasó függvényed eleve nem ad vissza csak 6 karaktert, ezért ezzel azt nem tudod kiszűrni ha többet írnak be. Ehhez a beolvasásnál kellene ellenőrizni, hogy pontosan 6 karaktert írtak-e be.
MOD: sőt, mivel egy lezáró 0 byteot is tesz, rögtön túl is címzi a 6 elemű tömböt. Uppsz. -
Jester01
veterán
válasz
cellpeti #656 üzenetére
Azok azért vannak, hogy megkapd a számjegyek értékét. A 0 ascii kódja (ahogy a stringben van) ugyanis 48 (másnéven '0'). Szerencsére innen sorban jön a többi 9 számjegy, tehát sima kivonással meg lehet kapni a számértéket.
Egyébként a string hosszának ellenőrzése még nincs meg.
-
cellpeti
nagyúr
int osszeg=0;
for (i=0; i<5; i++)
osszeg+=kod[i]-'0';
if (osszeg%6 != kod[5]-'0')
printf("nem jo\n");
else
printf("jo\n");Ha jól értrem akkor a for ciklus végignézi a láncot 5ig,ugye?
De hogy adja össze?osszeg+=kod[i]-'0';
if (osszeg%6 != kod[5]-'0')Mik ezek a '0'-k benne,azok mi célt szolgálnak?
-
cellpeti
nagyúr
Sziasztok!
Nekem van egy feladatom:
a program árucikkek kódjait kezelik. kérje be a felhasználótól az árucikk azonozító kódját, az azonosító kód csak akkor érvényes ha megfelel a következő követelményeknek:
- pontosan 6 számjegy karakterből áll
- ha az első 5 számjegy összegét 6-tal elosztva a maradék megegyezik a 6. számjeggyel
egy érvényes azonosító 123453
ha az azonosító nem érvényes ezt hibaüzenettel jelezze!
a kódok bevitelét és ellenőrzését addig ismétleje amíg az árucikk kódja helyett üres karakterlánc nem érkezik.a progit sejtem,hogy kell elkezdeni:
*******************************************************
#include<stdlib.h>
#include<conio.h>int getline(char s[],int lim) {
int i,c;for (i=0;i<lim && (c=getchar())!=EOF && c!='\n';++i) s[i]=c;
s[i]='\0';
while (c!=EOF && c!='\n') c=getchar();
return i;
}void main(void){
int kod[6];
int a;
getline(kod,6);}
*******************************************************
Azt nem vágopm,hogy a tömb 5 első elemét,hogy adom össze?
Össze kell adni az első 5 bekért karaktert,majd egy tömbbe le kell tárolni őket?
Bocs,hogy hosszúra sikerült a dolog!:S -
kékfej
csendes tag
nagyon köszi! majd próbálkozok!
mert igazából nekem inkább grafikai ismereteim vannak..ehhez sztnék vmilyen alkalmazott inf tudást..h pl az általam kitalált weboldalt megtudjam valósítani..
v szerintetek magasabb szinten ez inkább 2 külön ember feladata??
köszi! -
PazsitZ
addikt
fordítók az első hsz-ben a Fordítóprogramok, fejlesztőkörnyezetek: után
Weboldalakhoz, főként ha pusztán HTML általi, statikus tartalmú oldalakat akarsz akkor egyáltalán nem szükséges programozási nyelv ismerete.
Ha pl. PHP alapú dinamikus oldalakat szeretnél gyártani, ahhoz már kell programozói tudás. -
Hali!
Ezt javasolnám: [codeblocks-8.02mingw-setup.exe]
Free C/C++ IDE fejlesztőkörnyezet, ebben az installerben bent van a Compiler illetve linker, automatikusan telepedik, nem kell semmit állítani.
Ha csak HTML és CSS, ahogy írtad, ahhoz nem kell C programozási ismeret, azonban a PHP, JavaScript, Flash ActionScript stb nyelvek esetén nagy előny.Fire.
-
kékfej
csendes tag
Üdvözletem Mesterek!
itt egy abszolút kezdő..
az ügyben kérném a segítségeteket, h honnan tudnék fordítóprog-ot letölteni windows xp-re..C-ben sztnék programozni..
másik kérdésem: ha esetleg weboldalakkal sztnék foglalkozni, akk ahhoz előfeltétel h tudjak C-ben prog-zni? v elég a HTML v CSS ismeret? amit örömmel vennék ha vki elmagyarázná mit jelent..
köszönöm, annak aki reagál! -
Orc
senior tag
válasz
Fire/SOUL/CD #648 üzenetére
Köszi, a listán kellet farigcsálnom egy kicsit.
-
Hali!
Akkor remélem ez megfelel, másra már nem tudok gondolni...
Bocsi ha megint mellétrafálnék...#include <iostream>
using namespace std;
typedef class T_ALMA {
int i, j;
public:
void beallit(int a, int b) {
i = a;
j = b;
}
void almakiir() {
cout << "En a T_ALMA vagyok: ";
cout << i << " " << j << endl;
}
}ALMA;
typedef class T_KORTE : public ALMA {
public:
void kortekiir() {
cout << "En a T_KORTE vagyok\n";
}
}KORTE;
int main()
{
KORTE kortek[2];
kortek[0].beallit(1,2);
kortek[1].beallit(3,4);
kortek[0].almakiir();
kortek[1].almakiir();
kortek[0].kortekiir();
kortek[1].kortekiir();
return 0;
}Fire.
-
Orc
senior tag
válasz
Fire/SOUL/CD #646 üzenetére
Nem egészen erre gondoltam, hanem valami ilyesmire:
alma.h
class alma
{
public:
int szin;
virtual int kiir();
...
};
class körte : public alma
{
public:
int meret;
körte(int szin,int meret);
...
};
main.cpp:
cin>>meret;
cin>szin;
Node* a;
a<<körte(szin,meret);Valami ilyesmi kellene, csak az a kérdés, hogy milyen típusú listával tudom ezt megtenni...
-
Hali!
Remélem erre gondoltál, lista-szerkezetnek vagy láncolt listának(ahogy tetszik) hívják.
#include <stdio.h>
#include <stdlib.h>
struct Alma {
int value;
struct Alma *next;
};
int main()
{
struct Alma KORTE[2];
KORTE[0].value=10;
KORTE[0].next=&KORTE[1];
KORTE[1].value=20;
KORTE[1].next=NULL;
printf("Korte 1 erteke: %d\n",KORTE[1].value);
(KORTE[0].next)->value=30;
printf("Korte 1 erteke uj ertke: %d\n",KORTE[1].value);
return 0;
}Fire.
-
Orc
senior tag
[link] Erre van valakinek ötlete?
-
Steve-S
tag
Hi all!
A kérdésem:
Van egy függyvény definíció: double tombatlag(double *tomb)
ez kiszámítaná a tömb eleminek az átlagát és visszaadja azt. Azt nem tudom hogy hogy kellene az elem összeadó ciklusnak megadni azt hogy meddig menjen, magyarán mennyi a tömb mérete, vagy hogy hol van a tömb vége, anélkül hogy ezt megadnánk a függvénynek paraméterként, vagy a ciklusváltozóban beírnám a feltételnél az elemszámot?
Itt van egy példa amelyben kiszámolja amennyiben tudom a tömb méretét, de nekem az a verzió kéne mikor nem tudom előre a méretet. Egyáltalán van erre valamilyen módszer C-ben? Sok mindent próbálgattam már, de eddig nem volt jó semmi.double tombatlag(double *tomb)
{
double osszeg=0;
int j, db=0;
for(j=0;j<5;j++)
{
osszeg += *tomb++;
db++;
}
return osszeg/db;
} -
doc
nagyúr
no, a harmadik:
elso lepesben i erteke 1 lesz
utana megvizsgalja a feltetelt (mivel a C-s for ciklus lenyegeben egy specialis while), a feltetel pedig az, hogy i erteke legyen 10, ami a 10-es erteket adja vissza, ami ugye igaznak szamit, es ezt minden egyes ciklusban vegrehajtja (vagyis i erteke mindig 10)a negyediknel meg nem egeszen az a szitu, eloszor ugye i 1 lesz, utana ellenorzi a feltetelt, es akkor megy bele a ciklusba (szep parasztosan megfogalmazva) ha i erteke 10, de mivel nem annyi, igy sosem hajtodik vegre a ciklusmag
-
blaces
tag
Kösz
az első kettőnél vágom, hogy akkor hogyan lehet igaz a feltétel
A harmadiknál értem, hogy miért nem megy be a ciklusba, mivel ott igazából nincs feltétel, csak kétszer lett megadva az x, de azt nem értem, hogy miért végtelen
A negyedik azért véges, mert addig csinálja amíg egyenlő lesz 10-el az x, de amint 11 lesz az x értéke akkor 0 lesz, azaz hamis, így véges a ciklus
-
doc
nagyúr
az elso harom a vegtelen, mivel ezekben a feltetel nem 0 (es ami nem 0, az a C-ben igaz)
eloszor ugye a feltetel az i valtozo, aminek az erteke 10, tehat igaz
a masodik esetben a feltetelben az i-be 10-et raksz, igy a kifejezes erteke is 10, tehat igaz
a c-nel ugyanaz az eset mint a masodiknal
a harmadiknal viszont egyszer sem fut le a ciklus, mivel a feltetel az, hogy i egyenlo 10-zel, de ez sosem teljesul (i erteke 1, igy be sem megy a ciklusba) -
blaces
tag
Sziasztok!
Én csak annyit találtam a végtelen ciklusokról, hogy ha a feltétélük mindig igaz, akkor végtelen ciklus lesz. Csak akkor lép ki a feltételből ha az már hamissá teszi.
Ezek közül melyik végtelen ciklus és miért? hogyan értelmezi ezt a program? (az if-eset jól elmagyaráztatok anno)
a, i=10, while (i);
b, while (i=10) i;
c, for(x=1; x=10; x++);
d, for(x=1; x==10; x++);Szerintem az a, c, d végtelen ciklus
-
doc
nagyúr
a gond az, hogy igazabol nem tudom, mit szeretnel elerni
de kicsit atalakitottam, hogy azt csinalja amit szerintem szeretnel hogy csinaljon...
#include <stdio.h>
char *input(char *s)
{
strcpy(s,"Hello");
printf("%s \n",s);
return s;
}
int main()
{
char s[1024];
printf("%s \n", input(s));
return 0;
}igy legalabb csunyarondafujnemszabad globalis valtozo sincs, meg lokalis valtozo visszaadasa, meg egyeb "ejnyebejnyekezedrecsapok" megoldasok...
-
PazsitZ
addikt
Hmm, azóta változtattam rajta. Tudom nagyon béna vagyok.
Amúgy most látom, hogy van külön linux c topik is. Én most épp solaris allatt fordítok.
Jelen pillanatban ezt kapom vissza:
Hello
ا��o
ebből:#include <stdio.h>
char *back;
char *input()
{
char in[6]="Hello";
printf("%s \n",in);
return in;
}
int main()
{
back = input();
printf("%s \n",back);
return 0;
} -
PazsitZ
addikt
Köszönöm a válasz elnézést, hogy csak most reagálok, de nem megy
pár warning után:
main.c: In function `input':
main.c:9: warning: function returns address of local variable
main.c: In function `main':
main.c:14: warning: assignment makes integer from pointer without a castEgy Segmentation Fault (core dumped) üzenetet kapok csak
-
PazsitZ
addikt
Valamit biztos nagyon rosszul csinálok, de rég nem programoztam c-ben.
Szóval a lényeg az lenne, hogy átadjak egy stringet egy függvényből a main-be.
De ehelyett csak 1 karaktert hajlandó átadni.
#include <stdio.h>
char back[5];
char input()
{
char in[5]="Hello";
printf("%s \n",in);
return *in;
}
int main(int argc, char *argv[])
{
*back = input() ;
printf("%s \n",back);
return 0;
} -
rallye
csendes tag
válasz
Fire/SOUL/CD #622 üzenetére
Köszi szépen!
-
rallye
csendes tag
Azt szeretném csinálni, hogy automatikusan leálljon a 10.mp-ben, de nem sikerült.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <time.h>
clock_t clock(void);
main(){
double a;
getch();
a=clock()/CLOCKS_PER_SEC;
if(a>10.0){
printf("A program kezdete ota eltelt ido: %2.2f mp ezert leallt.",a);
getch();
return 0;}
else
printf("A program kezdete ota eltelt ido: %2.2f mp.",a);
getch();
} -
Benmartin
senior tag
szia!
wincon.h-hoz szükséges windows.h, char != char*, azért x = '3'. SetConsoleCursorPosition() fvnek nem csak header kell, hanem library is(kernel32). valamint nem két int a paramétere, hanem:
BOOL WINAPI SetConsoleCursorPosition(
__in HANDLE hConsoleOutput,
__in COORD dwCursorPosition
);ennek megfelelően így alakul a kód:
#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <wincon.h>
main() {
COORD kord;
HANDLE hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
kord.X = 2;
kord.Y = 3;
char x = '3';
SetConsoleCursorPosition(hConsoleOutput,kord);
printf("%c",x);
getch();
} -
rallye
csendes tag
Hát nem nagyon bírom életrekelteni.
Ha beleraktam a windows.h/wincon.h-t akkor sem ment.#include <stdlib.h>
#include <conio.h>
#include <stdlib.h>
main() {
char x="3";
SetConsoleCursorPosition(2,2);
printf("%c",x);
getch();
} -
Jester01
veterán
Akkor a SetConsoleCursorPosition függvény kell neked és amúgy a Console Reference részt olvasgasd az msdnben.
-
rallye
csendes tag
Sziasztok!
Az lenne a kérdésem, hogy sima c-ben, hogyan tudom pozícionálni a kiírást?
Például, hogyan tudnám kiírni a 2.sor 5.oszlopába vmit.Valaki azt mondta nekem, hogy goto, de nem sikerült.
Pascalban gotoxy(x,y) volt, de itt nem működött nekem.
Előre is köszönöm a segítséget.
-
blaces
tag
köszi
Van különbség a b/3.6=v (ebbe beleköt a fordító) és a v=b/3.6 művelet végrehajtása között?
azt akarom, hogy a v egy méter/sec egység legyen, mert a b km/h-ban van...
valahol valamit elszámol a program... -
blaces
tag
szintaktikai hiba megoldva
csak a megjegyzést kellett kitörölnöm...
/* Feladat:
Írjunk programot, amely kiszámolja és kiírja egy gépkocsi fékútját a sebesség és
az útviszonyok függvényében. A feltételezett lassulás:
a) normál úton: 4.4
b) vizes úton: 3.4
c) vizes, nyálkás úton: 2.4
reakcióidő: 1 másodperc
A gépkocsi kezdő sebessége bemenő adat.*/#include <stdio.h>
main()
{
double b, v, aa=4.4, ab=3.4, ac=2.4, s, s1, s2; /* aa=normál út, ab=vizes út, ac=vizes, nyálkás út */
int t=1, menu;printf ("Melyik utviszonyt vizsgaljam?\n 1-Normal ut,\n 2-Vizes ut,\n 3-Vizes, Nyalkas ut\n");
scanf ("%d", &menu);printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6; /* km/h órát átkonvertálja m/s-ba */
s1=v*t;switch (menu)
{
case 1: s2=v*v/2*aa; break;
case 2: s2=v*v/2*ab; break;
case 3: s2=v*v/2*ac; break;
default: printf("Hiba"); break;
}
s=s1+s2;
printf("Gepkocsi fekutja normal uton:\n");
printf ("s=%lf", &s);getch();
return 0;
}Eredményre mindig ezt dobja ki: s=0.00000
-
doc
nagyúr
es ez miert szebb, mintha ugyanezt switch-csel csinalnad?
(amugy gondolom a 3. esetnel csak veletlenul irtal ab-t ac helyett)printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6;
s1=v*t;
switch (választottmenüpont)
{
case 1: s2=v*v/2*aa; break;
case 2: s2=v*v/2*ab; break;
case 3: s2=v*v/2*ac;break;
}
s=s1+s2;
printf("Gepkocsi fekutja normal uton: s=%lf", &s);vagy akar:
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6;
s1=v*t;
s2=v*v/2;
switch (választottmenüpont)
{
case 1: s2*=aa; break;
case 2: s2*=ab; break;
case 3: s2*=ac;break;
}
s=s1+s2;
printf("Gepkocsi fekutja normal uton: s=%lf", &s); -
blaces
tag
Mivel erősen az órai vázlatra építettem, ezt hogyan lehetne szebben is megírni, hogy a case ágakban ne ismétlődjön a képlet (mert csak az aa, ab, ac változokat kell módosítani).
Erre gondoltam, hogy if else else-vel készíteném el, hogy
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6;
s1=v*t;
if (választottmenüpont == 1) {
s2=v*v/2*aa;}
else (választottmenüpont ==2){
s2=v*v/2*ab;}
else (választottmenüpont == 3){
s2=v*v/2*ab;}
s=s1+s2;
printf("Gepkocsi fekutja normal uton: s=%lf", &s);(vázlatosan)
-
blaces
tag
/* Feladat:
Írjunk programot, amely kiszámolja és kiírja egy gépkocsi fékútját a sebesség és
az útviszonyok függvényében. A feltételezett lassulás:
a) normál úton: 4.4
b) vizes úton: 3.4
c) vizes, nyálkás úton: 2.4
reakcióidő: 1 másodperc
A gépkocsi kezdő sebessége bemenő adat.*/#include <stdio.h>
main()
{
double b, v, aa=4.4, ab=3.4, ac=2.4, s, s1, s2; /* aa=normál út, ab=vizes út, ac=vizes, nyálkás út */
int t=1, menu;//Menü létrehozása, hogy mely útviszonyok között számoljon a program
printf ("Melyik utviszonyt vizsgáljam?\n 1-Normal ut,\n 2-Vizes ut,\n 3-Vizes, Nyalkas ut\n");
scanf ("%d", &menu);switch (menu)
{
case 1:
{
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);
v=b/3.6;
s1=v*t;
s2=v*v/2*aa;
s=s1+s2;
printf("Gepkocsi fekutja normal uton: s=%lf", &s);
break;
}
case 2:
{
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);break;
}
case 3:
{
printf("Kerem a kezdosebesseget:\n");
scanf ("%lf", &b);break;
}
default:
{
printf("Hiba\n");
break;
}}
getch();
return 0;
}Hibalista:
C:\Documents and Settings\hallgato\Dokumentumok\utviszony.c In function `main':
18 C:\Documents and Settings\hallgato\Dokumentumok\utviszony.c syntax error before '/' token
18 C:\Documents and Settings\hallgato\Dokumentumok\utviszony.c stray '\252' in program
aztán így tovább csak a számok különböznek... a 252 helyett 246 és stb.Úgy építettem fel mint az órán csináltuk az egyik feladatot, de ott nem rinyált (igaz ott megjegyzést sem tettem be) itt nem tudom hogy mi a baj.
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Bluetooth hangszórók
- Kerékpárosok, bringások ide!
- Linux kezdőknek
- Windows 98/ME kérdések és válaszok
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Telekom otthoni szolgáltatások (TV, internet, telefon)
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- AMD Catalyst™ driverek topikja
- Milyen belső merevlemezt vegyek?
- Kertészet, mezőgazdaság topik
- További aktív témák...
- Csere-Beszámítás! Custom vizes számítógép játékra! I7 12700KF / RTX 3090 / 32GB DDR5 / 1TB SSD
- Sigma 150-600mm f/5-6.3 DG OS HSM C ( Canon ) -Újszerű-
- Dell Latitude 7410 Strapabíró Ütésálló Profi Ultrabook Laptop 14" -80% i7-10610U 16/512 FHD IPS MATT
- Új MSI KATANA 15 Gamer Tervező Laptop 15,6" -35% i7-13620H 10Mag 16/1TB RTX 4060 8GB FHD 144Hz
- HP Omen - 27" IPS - UHD 4K - 144Hz 1ms - NVIDIA G-Sync - FreeSync - HDR 400 - USB-C - KVM Switch
- LG 65C4 - 65" OLED evo - 4K 144Hz - 0.1ms - NVIDIA G-Sync - FreeSync - HDMI 2.1 - 1000 Nits
- AKCIÓ! Csere-Beszámítás! Gainward Phantom RTX 4070Ti 12GB GDDR6X Videokártya!
- PlayStation Network Card (PSN) ajándékkártyák, egyenesen a Sony-tól!
- Epson Workforce DS-530II Dokumentum szkenner
- Lenovo Legion 5 Gaming. Az ár irányár, komoly érdeklődés esetén van lehetőség egyeztetésre
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest