- One mobilszolgáltatások
- Mi nincs, grafén akku van: itt a Xiaomi 11T és 11T Pro
- VoLTE/VoWiFi
- Mobil flották
- Xiaomi 15 - kicsi telefon nagy energiával
- Google Pixel 8a - kis telefon kis késéssel
- Samsung Galaxy S25 - végre van kicsi!
- Milyen okostelefont vegyek?
- Samsung Galaxy A54 - türelemjáték
- Samsung Galaxy S24 Ultra - ha működik, ne változtass!
Új hozzászólás Aktív témák
-
-
Hali!
Na megnéztem a "gyakorlatban". Valóban a CodeBlocks befordítja minden hiba nélkül, még csak warning sincs. Persze ez csak azt jelenti, hogy formailag helyes a kód, de tartalmilag nem.
Szerencsére kék halált nem dobott, de a hibajelentés küldése MS-nek, az befigyelt. Amellett, hogy javítod Jester01 kolléga válaszában található feltárt hibákat, azonkívűl gondoskodsz arról is, hogy ha egy program paraméterezve fut, akkor MINDEN ESETBEN ELLENŐRIZNI KELL A PARAMÉTEREK MEGLÉTÉT!Különben jön a kékhalaál, meg hibajelentés, meg szegmenshatár túllépés, meg még sok sok minden...
Fire.
-
Hali!
Mondjuk az nem ártana ha ilyenkor azt is leírnád, hogy milyen fejlesztőkörnyezetet használsz.
Vagy hibás a környezet, vagy olyan kapcsoló(k) vannak beállítva(compiler. linker, stb), amik ezt az eredményt adják. (pl memória modellek)Fire.
UI: csak átfutottam, kipróbálni most nem tudtam, de nem látok bent olyan hibát, ami miatt ilyen "hiba" állna elő, mármint hogy befordul simán(az viszont gyanús hogy nem is lehet futtatni, majd 15-óra után ki tudom próbálni, még az is lehet, hogy kékhalált fog dobni)
-
Hali!
1. Elméletileg működnie kell(főleg ha a "\\\\target.......... elé teszel egy szóközt
" \\\\target.......2. pont az a dolga, hogy a target nevű gépen futtassa az adott progit....
3. Több gép esetén(LAN vagy ugyanazon Domain esetén) van megoldás, hogy ne kelljen pl 20-szor lefuttatni külön gépnevekkel.
készítesz egy TXT fájlt pl : gepek.txt néven, ebbe a TXT fájba felsorolod azokat a gépeket, amiket szeretnél:
\\gep1
\\gep2
....
\\gepXezután:execl("psexec.exe"," @gepek.txt -i -c d:\\kampi\\map.bat",NULL);
(figyelj a szóközre, itt is ott van)3. a psexec nem ad vissza hibakódot!(bele is vagyon írva)
Ha 0-val tér vissza akkor minden ok, ha nem akkor azt az általa futtatott alkalmazás vagy egyéb adja vissza. Ezek a hibakódok szabványos Windows hibakódok(már ha az alkalmazás amit futattál windows-os)
Ezen hibakódokat itt megtalálhatod: [Windows System Error Codes]Ha van esetleg még kérdésed(és tudok bent segíteni) akkor azt privbe légyszives, mert ez mégis csak C Topic, amiről meg beszélünk az egész más már...
-
Hali!
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main()
{
int error;
error = execl ("c:\\windows\\system32\\mspaint.exe", " d:\\ubul.jpg", NULL);
system("c:\\windows\\system32\\mspaint.exe d:\\ubul.jpg");
return 0;
}Mindkét esetben megnyitom a Paint-et 1 paraméterrel ami egy kép elérése, azaz a Paint elindul és betölti az adott képet automatikusan.
A system-es megoldás nem elegáns és nem is szokták javasolni, de ennek ellenére használható, ha nem fontos hogy a progi hordozható legyen, és tudod hogy csak egy adott környezetben fogod úgyis csak használni a progit.(vagy másképp fogalmazva: ha magánhasználatra készíted a progit)
Ahogy látszik execl esetén csak simán fel kell sorolni az adott paramétereket(ügyelve hogy szóköz legyen közte!), az error változó ha -1, akkor nem sikerült futtatni az adott külső alkalmazást.
Az execl használatához az unistd.h headerfile szükséges.Fire.
-
-
Hali!
Megoldható, nem olyan bonyolult aminek tűnik.
Engem viszont először az érdekelne, hogy milyen C környezetben dolgozol???
(mi a program neve, amivel dolgozol, a grafikus megjelenítés szempontjából nem mindegy)CellPeti
Amit adtál linkeket, azt ne használd, mert az egyik az egy "herélt" egyenletet tartalmaz, a másik meg(delphi), az meg hibás kódot...Fire.
UI: mondjuk azt nem értem, hogy a tömeget minek adták meg...
, nincs rá szükség a parabola kirajzolásához
-
válasz
cellpeti #817 üzenetére
Hali!
Semmi komolyra ne gondolj, "bármely" ciklus utasítást használhatod, mondjuk nagy variáció nincs, mert van a FOR, a WHILE, meg a DO-WHILE. A bármely szót azért tettem idézőjelbe, mert míg a FOR és WHILE előtesztelős ciklus utasítások(azaz a ciklusfeltétel kiértékelése a ciklusmag futattása elött történik), addig a DO-WHILE utótesztelős(ebben az esetben a ciklusmagban lévő programkód egyszer mindenképp lefut, és csak azután kerül kiértékelésre a ciklusfeltétel) ezért ezt körültekintően kell alkalmazni.
A hisztogramokat meg nagy általánosságban úgy lehetne meghatározni, hogy különbözö adatok, folyamatok, információk stb vizuális megjelenítése...
Egy oszlop diagram is hisztogram. De egy program működéséről is lehet hisztogramot készíteni, csak ott úgy nevezik hogy folyamatábra...
És persze számtalan különféle hisztogram létezik, amit felsorolni sem lehet, de Te is nap mint nap találkozol rengeteggel....Fire.
-
válasz
cellpeti #814 üzenetére
Hali!
A második feladattal kezdeném
kell egy ciklus, ami a string hossza-1-ig fut(ha használhattók string-kezelő függvényeket), ha nem akkor meg a stringet lezáró 0(nulla)-ig
a string[0]-tól megnézed a karaktereket string[strnighossz-1]-ig
ha a string[n] NEM \t, \b karakter akkor simán kiiratod
ha IGEN akkor nem iratod ki, hanem helyette a dupla backslash-t =>printf("\\\\")
C-ben a backslash karaktert "duplázni" kell kiiratáskor(többekközt), erre azért van szükség mert a backslash vezeti be a vezérlőkaraktereket is \t,\n,\b stbAz első példa
kell egy ciklus, ami a string hossza-1-ig fut(ha használhattók string-kezelő függvényeket), ha nem akkor meg a stringet lezáró 0(nulla)-ig
kell egy "szőközjelző" integer pl _IS_SPACE, ezt a progi elején nullázd
a string[0]-tól megnézed a karaktereket string[strnighossz-1]-ig
ha a string[n] NEM SZÓKÖZ KARAKTER, akkor kiiratod és az _IS_SPACE-t ALACSONYRA(0) állítod
ha a string[n] SZÓKÖZ KARAKTER, akkor megvizsgálod, hogy az _IS_SPACE alacsony(0) vagy magas(1)
ha az _IS_SPACE ALACSONY(előtte nem szóköz volt) akkor kiirod a szóközt, és MAGASRA(1) állitod az _IS_SPACE-t
ha _IS_SPACE MAGAS(elötte szóköz volt) akkor nem iratsz ki semmitLeírva bonyolultabb mint a kész progi...
Fire.
-
-
válasz
cellpeti #778 üzenetére
Hali!
Ezt az eljárást gyakran használják fórumokon, ahol ha oda nem illő szavakat helyettesítik.
Itt a példa, hogy mit is kellene megvalósítani RothKrisz-nek." aa aaa bb cc aa, aa-gg aaaa cccc aa, aa, baa."
ebben cserélje le az "aa" szavakat "*"-ra, erdményül ezt kell kapni
" * aaa bb cc *, * aaaa cccc *, *, baa."Fire.
-
Hali!
1. Nézd, én szeretek segíteni másoknak, többek közt azért is, mert annak idején nekem nem segített senki, pedig sokszor rengeteg időt spórolhattam volna vele.
(Egy (akkoriban) 300 lelket számláló településről származom, ahol nem hemzsegtek az informatikusok, meg a programozók, meg évekig az egyetlen "számítógép" az egy C64-es volt az egész faluban)
Azzal sem foglalkozom, hogy valaki jó arcnak tart vagy sem, nem várok el senkitől elismerést, nincs feltűnési viszketettségem...2. Abban teljesen egyetértek Veled, hogy az nem jó megoldás, ha egy feltett kérdésre, forráskóddal válaszol az ember. Az, hogy most több forráskódot látsz tőlem, az csak "véletlen". (bár véletlenek nincsenek
)
A HSZ-oknak is van előzményük, nézzük CellPeti-t. Ha visszaolvasol, akkor látnod kell, hogy Ő a tudásához mérten megpróbálkozott elkészíteni a progit, kérdezett, javította amit kértem tőle, azaz kitartó és türelmes volt.(Ez számomra is fontos, akárcsak számodra). De eljutott egy olyan pontra, ahol kell az a kis "lökés". Biztos vagyok benne, hogy a forráskódnak köszönhetően, sokat tanult, látja hogy jó irányba halad, jól áll neki egy feladat megoldásához stb, és belátja, hogy a kitartásnak, türelemnek lesz eredménye.KisKatus esete teljesen más: [Előzmény]
Bárki, aki elolvassa ezt HSZ-t, két dolgot tehet, vagy segít vagy nem. A kérés egyértelmű.
Megnéztem, KisKatus nem tartozik abba a kategóriába, aki minden héten azt kéri, hogy valaki írja meg helyette a progikat.
Én nem szoktam senkit bírálni. Mondhattam(vagy gondolhattam) volna, hogy "biztos egy lusta dög, egész évben nem tanult semmi, buktassák csak meg...stb".
Csak ehhez nincs jogom, nem beszélve arról, hogy mekkorát tévedhet az ember.
A legtöbbet a felkommentezett forráskóddal tudtam segíteni neki.3. lehet, hogy hihetetlen, de én sem segítek mindenkinek. Priv-be több emberkének is segítek Pascal, C ill. Assembly-ben. Volt pár arc, akinek sürgősen kellet a segítség, de írtam hogy válaszoljon, módosítson ezt-azt. Nem válaszolt. Majd egyszer váratlanul megint feltűnt, hogy megint gyorsan kellene kód.
Na, akkor szépen megírtam neki, hogy keressen más emberkét kódot írni, engem meg felejtsen el.4.Én is tisztában vagyok vele, hogy pl Informatikus-képzés, hát nem épp a legjobb...
Persze vannak nagyon jó sulik is.
Régebben láttam olyan hirdetést, amiben Informatikust kerestek, a végére meg oda volt írva nagy kiemelt betűkkel, hogy az xxxxxxxxx intézményben végzettek kíméljenek!Fire.
-
válasz
cellpeti #765 üzenetére
Hali!
Köszönöm a hozzászólást!
Itt a kód, ami (miután tisztáztuk, hogy mit is kell írni) 10 perc alatt készült...#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#define MAXBINARIES 16
#define MAXBITS 16
#define NUMBERINDEX 0
#define BITCOUNTINDEX 1
char BinaryDigits[MAXBITS+1];
int BinariesCount=0;
unsigned int Numbers[MAXBITS][2];
unsigned int btou(int bitnumber, char s[]) {
int i;
unsigned int number=0;
for (i=bitnumber-1;i>=0;i--) {
if (BinaryDigits[i]) number+=pow(2,bitnumber-i-1);
}
return number;
}
int bin(int bitnumber, char s[]) {
int i;
for (i=0;i<bitnumber;i++) {
if (BinaryDigits[i]!=0 && BinaryDigits[i]!=1) {
printf("Nem binaris szam, probalja ujra...\n");
return 0;
}
}
Numbers[BinariesCount][BITCOUNTINDEX]=bitnumber;
Numbers[BinariesCount++][NUMBERINDEX]=btou(bitnumber,BinaryDigits);
return 1;
}
void InputBinaries() {
int i,j,ch;
printf("Kerem a szamokat binaris formaban (max. 16 darab, max. 16 bites szamot)\n\n");
for (i=0;i<MAXBINARIES;i++) {
do {
printf("%02d. szam: ",i+1);
j=0;
do {
ch = getchar();
BinaryDigits[j++] = ch-'0';
}
while( ch!='\n' && ch!=EOF && j <= MAXBITS);
fflush(stdin);
if (j==1) return;
}
while (!(bin(j-1,BinaryDigits)));
}
return;
}
void bintoscreen(int binariesndx) {
int i;
unsigned int a;
a=Numbers[binariesndx][NUMBERINDEX];
i=MAXBITS-Numbers[binariesndx][BITCOUNTINDEX];
for (;i>0;i--) printf("0");
for (i=Numbers[binariesndx][BITCOUNTINDEX]-1;i>=0;i--) {
printf((a & (unsigned int)pow(2,i)) ? "1":"0");
}
}
void bintoscreenXOR(int binariesndx) {
int i,j,highbitcount;
unsigned int a,b,c;
highbitcount=0;
a=Numbers[binariesndx][NUMBERINDEX];
b=Numbers[binariesndx+1][NUMBERINDEX];
c=a^b;
if (Numbers[binariesndx][BITCOUNTINDEX]>Numbers[binariesndx+1][BITCOUNTINDEX])
i=MAXBITS-Numbers[binariesndx][BITCOUNTINDEX];
else i=MAXBITS-Numbers[binariesndx+1][BITCOUNTINDEX];
j=i;
for (;i>0;i--) printf("0");
for (i=MAXBITS-j-1;i>=0;i--) {
if (c & (unsigned int)pow(2,i)) {
printf("1");
highbitcount++;
}
else printf("0");
}
printf("\t%9u\t",a^b);
printf((highbitcount % 2) ? "Paratlan" : "Paros");
}
int main() {
int i;
printf("Peldaprogram by Fire/SOUL/CD [Code::Blocks 8.02]\n\n");
InputBinaries();
if (BinariesCount) {
printf("\nSorszam\tBinaris\t\t\tDecimalis\n\n");
for (i=0;i<BinariesCount;i++) {
printf("%02u.\t",i+1);
bintoscreen(i);
printf("\t%9u\n",Numbers[i][NUMBERINDEX]);
}
if (BinariesCount>1) {
printf("\nSorszam\tBinaris\t\t\tDecimalis\tMagas bitek\n\n");
for (i=0;i<BinariesCount-1;i++) {
printf("%02u.\t",i+1);
bintoscreen(i);
printf("\t%9u\n",Numbers[i][NUMBERINDEX]);
printf("%02u.\t",i+2);
bintoscreen(i+1);
printf("\t%9u\n",Numbers[i+1][NUMBERINDEX]);
printf("XOR\t");
bintoscreenXOR(i);
printf("\n\n");
}
}
}
else printf("\nNem adott meg egyetlen binaris szamot sem...\n\n");
printf("\nA kilepeshez usson le egy billentyut...");
getch();
return 0;
}Fire.
UI: szerintem is többet ér megírni egy progit, mintha nem válaszolna rá esetleg senki
-
válasz
Jester01 #764 üzenetére
Hali!
A Fire/SOUL/CD az kb 1992-ben rendszerprogramozó matematika szakon végzett.
400 pontból 398-al, de csak azért, mert valamit nem tudott elolvasni a szaki, még ha a végeredmény stimmelt is. Ezenkívűl a választott diploma munkám címe ez volt:
"Lineáris permutációk a káoszban avagy rendezettség a rendezettlen halmazban"Ebből adódóan, nem hajtok semmilyen babérokra(nincs mire).
Sok esetben csak a kezdő "lökést" kell megadni pár emberkének, még ha ez azzal is jár, hogy megírod helyette a progit....Annyi gondom volt a progival, hogy így nem szabad megírni egy ilyen(file-compare) programot.
(csak sajnos a tanárbá feltételei miatt, csak így lehetett)Fire.
-
válasz
kiskatus #757 üzenetére
Hali!
Először is szívesen segítek Neked, a most következő rész az csak úgy kikívánkozott belőlem, NEM NEKED SZÓL!
"Elvittem az általad megírt programot és nem fogadta el, mert az fseek pozicionálást és az ftell-t még nem tanultuk."
Amikor ezt elolvastam, két idézet suhant át az agyamon, az első Hofi Géza kabaréból, míg a másik egy PH tag aláírásából származik(bár ezt nem szó szerint idézem)
"Szűz Mária idesanyám, aki a mennyekben lakozol titokban..." illetve
"nem az a baj, hogy nagy az Isten állatkertje, hanem az, hogy alacsony a kerítés"
Az aki ezt a feladatot feladta(alapszintű fájlkezelés kategória) és nem tanítja meg az alapszintű fájlkezelést Nektek(fseek, ftell stb), annak jobb lenne ha visszamászna a kerítésen belülre.
Ugyanis oly módon kellett megírni a programot(fseek, ftell nélkül), hogy nyugodtan rá lehetne ragasztani azt a címkét, hogy "A világ leglassabbra optimalizált fájl-összehasonlító alkalmazása avagy hogy ne írjunk C-ben ilyen programot"Na mindegy...imhol a kód...
#include <stdio.h>
#include <stdlib.h>
int main()
{
unsigned long ErrorCounter,FSize1,FSize2;
unsigned char chFirst, chSecond;
FILE * Szoveg1;
FILE * Szoveg2;
FILE * Kimenet;
printf("Binaris osszehasonlitas\n\n");
if (!(Szoveg1 = fopen("first.txt","rb"))) {
fprintf(stderr,"Nem lehet megnyitni a 'first.txt' fajlt...\n");
getchar();
exit(-1);
}
if (!(Szoveg2 = fopen("second.txt","rb"))) {
fprintf(stderr,"Nem lehet megnyitni a 'second.txt' fajlt...\n");
fclose(Szoveg1);
getchar();
exit(-1);
}
//itt változik némileg a kód, csak úgy lehet meghatározni a fájlok hosszát
//ha végig olvasom
FSize1=0;
while (fread(&chFirst,1,1,Szoveg1)==1) FSize1++;
FSize2=0;
while (fread(&chFirst,1,1,Szoveg2)==1) FSize2++;
if (!FSize1 || !FSize2) {
printf("A fajlok merete nem lehet 0 byte...");
fclose(Szoveg1);
fclose(Szoveg2);
getchar();
exit(-1);
}
if (FSize1!=FSize2) {
printf("A ket fajl merete nem azonos...\n");
fclose(Szoveg1);
fclose(Szoveg2);
getchar();
exit(-1);
}
rewind(Szoveg1);
rewind(Szoveg2);
//innentől változatlan
if (!(Kimenet = fopen("error.txt","wt"))) {
fprintf(stderr,"Nem lehet megnyitni az 'error.txt' fajlt...\n");
fclose(Szoveg1);
fclose(Szoveg2);
getchar();
exit(-1);
}
ErrorCounter=0;
while (fread(&chFirst,1,1,Szoveg1)==1) {
fread(&chSecond,1,1,Szoveg2);
if (chFirst!=chSecond) {
fprintf(Kimenet,"File-pozicio: %#.8lx %#.2x <> %#.2x\n",ftell(Szoveg1),chFirst,chSecond);
ErrorCounter++;
}
}
if (ErrorCounter) printf("%lu elteres talalhato a ket fajl kozt.\nNezze meg az 'error.txt' fajl tartalmat...\n",ErrorCounter);
else printf("A ket fajl azonos...\n");
fclose(Szoveg1);
fclose(Szoveg2);
fclose(Kimenet);
system("pause");
return 0;
}Fire.
UI: ha legközelebb is kódot illesztesz be a HSZ-be, akkor légyszíves használd az erre a célra "kifejlesztett"
KÓD feliratú gombot.
-
-
-
Hali!
Ez jó, ez tetszik!!! LOL
Ezek szerint, amúgy egész jó fej lehet, csak talán túl görcsösen ragaszkodik, az általa megszokott dolgokhoz(void main(void)
Akkor, ha valakinek segítek, az első kérdésem az lesz, hogy hol is tanul...
Aztán ha ott Győrben, akkor már töltöm is a fejlesztőkörnyezet számára a BAUER PETI BA settings-et.Fire.
-
-
válasz
cellpeti #741 üzenetére
Hali!
Az a void nem akkora gond! Na közben megírtam az egészet, bár nem hinném, hogy 100%-ban "Bauer Peti bá' kompatibilis".
Csak nincs lelkierőm nekiállni felkommentezni, mert ha alapos akarok lenni, akkor az legalább egy óra....Amúgy meg nem a "bin függvényben" van a gond, hanem az a gáz, hogy oda el sem jut, azaz nem hívódik meg...
Fire.
-
válasz
cellpeti #739 üzenetére
Hali!
Nos én a bináris számok beviteléhez szólnék hozzá. (CodeBlocks-ot használok)
3 figyelmeztetés jelenik meg a fordítás alatt(célszerű ezeket is javítani)1. warning: unused variable `rosszszam'
deklaráltad a rosszszam változót de nem használod, töröld ki2. warning: implicit declaration of function `pow'
anélkül használod a pow függvényt, hogy a header file include-olva lenne
írd be, hogy #include <math.h>3. warning: return type of 'main' is not `int'
a void main(void) helyett int main() ill. a program végére egy return 0A programról(bár lehet, hogy ugyebár azóta továbbfejlesztetted
)
Hibás az adatbevitel azon része, ami a bináris jegyeket ellenőrzi, mert simán elfogadja ezt:
0a vagy 1a vagy 010101a0101
Ez javításra szorul.Bár tudom, hogy a feladat szerint "pontosan 16 darab" számot kellene bekérni, de engem roppant módon irritál. Gyakorlásként majd ha minden működik így, utána írd át úgy, hogy max 16 darab számot lehessen bevinni, de ha üressort talál, akkor csak annyi számmal dolgozik amennyit addig bevittem.
Fire.
-
-
-
válasz
Fire/SOUL/CD #729 üzenetére
Hali!
Közbe leesett, gondolom úgy értik, hogy a tömb 0. meg 1. eleme közt, aztán 1. és 2. közt, aztán 2. és 3. közt........
És akkor max 32 bites számokat kérünk be, abba minden beleférFire.
-
-
-
válasz
cellpeti #723 üzenetére
Hali!
Maximálisan egyetértek Veled, hogy nem a tanárok hibája, hanem az oktatási rendszerünké.
"A tanároktól(tisztelet a kivételnek) nem kapnak türelmet az emberkék..."
Elnézést ha ezzel a mondattal félreérthető voltam, itt arra céloztam, hogy jómagam is(sajnos) ismerek olyan "tanárokat", akik egyszerűen pályát tévesztettek, alkalmatlanok a tanítói szakmára. Az "igazi" tanárokat(ezek szerint mint anyukád is) maximálisan tisztelem, mert lelkiismeretesen végzik a munkájukat, holott nekik is lehet mindenféle gondjuk-bajuk (anyagi, magánéleti, egészségügyi stb), de ennek ellenére erőn felül teljesítve, a diákok érdekeit szem előtt tartva, tisztességesen és elkötelezetten végzik a munkájukat.Fire.
-
Hali!
Hát igen, ezt már sokan mondták, hogy igen nagy türelemmel rendelkezem
.
Nem vagyok tanár(bár, akiknek segíteni szoktam, gyakran említik, hogy "miért nem jössz el a sulinkba tanítani számteket, mert ahogy Te elmondod, úgy értem...")
Még a 90-es években rendszerprogramozóként végeztem, Assembly-vel kezdtem.
Innen a kitartás meg türelem. Az, hogy másokkal is türelmes vagyok, annak meg az(is) az oka, hogy tudom, hogy kis hazánkban, hogy okítják a tanulókat számítástechnikára(meg másra is). A tanároktól(tisztelet a kivételnek) nem kapnak türelmet az emberkék, könyvből felírt példaprogik, gyors tanmenet, érti-nem érti lényegtelen. Nagyon sok jó képességű diák utálja meg a programozást és magát a számítástechnikát is egy életre, pont a "türelmetlenség" meg a minél gyorsabban leadandó tananyagok miatt. Sajnos ilyen az oktatási rendszerünk, a tanárokat is hajtják, túl vannak terhelve, a diákokat is hajtják, azok is túl vannak terhelve, persze hogy mindenki türelmetlen.Szóval legalább itt PH-n kapjanak az érdeklődők türelmet, meg normális hozzászólást, és ne ugyanazt vágja az ember a fejükhöz, amit esetleg a suliban is hallanak nap mint nap.
Fire.
-
válasz
kiskatus #711 üzenetére
Hali!
Hát sajna, nem tudom x64 Vista alá "felerőszakolni" a Turbo C++ 4-et, úgy hogy vakon adok tanácsot.
hozz létre egy könyvtárat c:\kiskatus
indítsd el a Turbo c++-t
töltsd be a projectet vagy fájlt
aztán (gondolom) file menü save as vagy save project as vagy valami menüpont segítségével ments ki a c:\kiskatus könyvtárba
csukd be ezt a projectet vagy fájlt
file menü open project vagy hasonlóval nyisd meg a c:\kiskatus -ból
és most próbáld meg a c:\kiskatus könyvtárba létrehozni a first.txt ill second.txt fájlokatLássuk mi törpénik....
Fire.
-
válasz
babyanigirl #714 üzenetére
Hali!
Szívesen!
Egyetértek veled(amit kiskatusnak írtál, hogy egy könyvtárt létre kellene hozni, és abba pakolni mindent...
Fire.
-
válasz
cellpeti #713 üzenetére
Hali!
Én magam is, amikor segítek, akkor CodeBlocks-ban írok, teljsen free, nagyon jó fejlesztőkörnyezet. Azonban kiskatus meg Borland Turbo C++ 4.0-ba.
Na ezt nem tudom felrakni x64 vista alá sajnos. Viszont így látatlanba, meg nem tudom, hogy hogy vannak beállítva a könyvtárak benne. valószínű, hogy az exe nem oda generálódik, ahol a forrásfájlok vannak.Fire.
-
-
-
válasz
kiskatus #707 üzenetére
Hali!
Na akkor már sínen vagyunk!
Létre kell hoznod egy first.txt nevű fájlt, abban a könyvtárban ahol a forrásfájl(C) van vagy oda ahova az exe generálódik.(esetenként ez ugyanaz a könyvtár)
Ha ez megvan és megint elindítod, akkor keresni fogja a second.txt fájlt, azt is hozd létre.
Ez a két fájl amit a progi összehasonlít. Írjál beléjük valamit, mondjuk az egyikbe egy 'a' a másikba egy 'b' betűt. Ha most futtatod, akkor kiírja a végén, hogy egy eltérés van, létrehoz egy error.txt nevű fájlt, amibe ha belekukkantasz akkor bent lesz, hogy hol van eltérés és miFire.
-
-
-
-
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;
} -
-
-
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.
-
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.
-
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.
-
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.
-
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.
-
válasz
Gergello #596 üzenetére
Hali!
Nincs baj azzal amit írsz, csak ugye le kellene ellenőrizni, hogy van-e helyes adat a STR-be.
Ezt megteheted a strlen() függvénnyel, vagy ahogy a példa mutatja, magával a scanf()-el is.
A scanf() egy egésszel tér vissza, mely jelzi, hogy hány értéket tudott feldolgozni.
(ha egyszerre pl 5 adatot kérsz be scanf()-el, akkor 5-tel tér vissza, ha minden oké volt)
Jelen esetben 1-gyel fog visszatérni, ha a bevitt szöveg megfelel a scanf()-ben megadott szűrésnek.#include <stdio.h>
#include <stdlib.h>
int main()
{
char str[256];
printf("Kérem a szöveget: ");
if (scanf("%20[a-z]",str)!=1) {
printf("Hibás adatbevitel");
return -1;
}
printf(str);
return 0;
}Fire.
-
Hali!
ha nem jó, akkor telepítsd újra. Innen letöltheted :[link]
Lehetőleg a MinGW-s változatot töltsd le, mert abban bent van GCC compiler meg a GDB debugger is, amit normálisan a telpítés után konfigurál is.Ha megvan indítsd el, aztán settings/compiler and debugger/toolchain executables fülön auto-detect gomb, okézd le aztán próbáld meg újra létrehozni egy új projectet.
Fire.
UI: gondolom nem egy létező project nevével akarsz új projectet létrehozni?
-
-
-
válasz
Benmartin #572 üzenetére
Hali!
Nos, a getch() ill a conio.h mióta C létezik azóta van és használják. Még a tankönyvek is mindenféle extra magyarázat nélkül alkalmazzák. Persze ma 2008-at írunk, és nem 1990-es évek elején vagyunk. Ezért teljesen egyetértek veled abban, hogy manapság(de csakis manapság), már más megoldásokkal kell(ene) operálni.
Az viszont elég szomorú, hogy 2008-ban olyan feladatokat kapnak a tanulók, amikhez Console Application-okhoz kell nyúlni"márpedig egyetemen úgy tudom standard ANSI C-t tanítanak."
Ehhez annyi a hozzáfűznivalóm, hogy ha ANSI C-t vagy CPP-t is tanítanak, akkor legalább olyan fejlesztőkörnyezetek segítségével(CodeGear Builder, VS C#, VS CPP) mutatnák meg a programozás rejtelmeit, szépségeit, amiket a későbbiekben hasznosítani is lehet.Mire gondolok? példáúl: írjuk ki 1-től 10-ig a számokat. Primitív feladat. De akkor legalább tennék hozzá hogy mondjuk egy StringGrid objektumban, annak legalább van értelme, nem pedig 80x25-ös karakteres képernyőn "maszatolni". A FOR ciklus ugyanaz, de legalább megismerkedne egy objektummal is egyúttal, ami hasznos is. Vagy
A korábbiakban volt olyan feladat hogy "sakktáblát" kellen kirajzolni, azon elhelyezni valamilyen betűt. Lehet pixelekkel dolgozni, ha ki tud rakni egy pixelt, adott színnel, adott helyre, akkor ki tud rajzolni is egy sakktáblát is(ami legalább hasonlít is valamelyest
), azután megtanulna két pixelt összekötni, már tudna vonalat rajzolni, ha tud vonalat rajzolni akkor azt meg lehetne forgatni 3D-be is, ha az is megy és tetszik a dolog, akkor meg neki lehet ugrani a DirectX programozásnak is... De nem, inkább a scanf() fx-t tanulja meg mert az fontos...
Tudom, hogy ezt most nagyon leegyszerűsítettem, de remélem a lényeg érthető belőle.
Mégegyszer: teljesen egyetértek a hozzászólásoddal, csak ez úgy "kikivánkozott" belőlem.
Fire.
-
Hali!
Használd a getch()-t csak így simán, ez egy billentyűleütésre vár.
Codeblocks alkalmas rá, mert amikor új projectet kreálsz, akkor kiválasztható, hogy C vagy C++ project legyen.magyarul függvényleírást meg keresgélek, bár nem ártana az angol alapfok
Fire.
UI: bár ha megvan a "Programozzunk C nyelven" című könyv, akkor nem ártana a 483. oldaltól átolvasni(ott vannak a függvények leírása)
-
-
válasz
sghc_toma #543 üzenetére
Hali!
Elöször is bocsesz a "költői visszakérdezésért", de már előfordult, hogy valaki minden szakmai alapot nélkülöző hozzászólással gazdagított, amikor meg visszakérdeztem, hogy hát azért mégis elmagyarázhatná nekem(amúgy nem kellett volna) hogy hogyis van az, na azóta nem hallottam felőle.
Való igaz (ahogy Te illetve dabadab kolléga is írta) a GETS magában rejti ezt a fajta hibalehetőséget, de csak ezt, és ez jól látható(money[255]). Nyílván nem létezik olyan bankautomata amibe be lehet írni 255 számjegyből álló összeget, hogy adja ki 20ezresekbe, vagy ha igen szóljatok, mert kérek kölcsön egy MTZ traktort azt elhozzuk, mert akkor k... sok pénz van benne...Azért nem szeretem a pl SCANF-t, mert az viszont rejtett "hibákat" tartalmaz és aki most ismerkedik a C-vel(lásd CELLPETI) azt nem tudhatja(mert sajnos a informatika vagy prográmozást oktató tanárbácsik is gyakran megfeletkeznek ennek elmagyarázásáról). Mire gondolok? Hát például Te is említést teszel ama bizonyos STDIN-ről ugyebár, amit a SCANF is "használ". Ha valaki tényleg korrekt INPUT-ot akar írni, annak erre oda kell figyelni. egy példával illusztrálom:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main()
{
int n1,n2;
do {
printf("Enter 2 numbers [num1,num2]: ");
if (scanf("%d,%d",&n1,&n2)!=2) {
printf("Bad INPUT, try again or * to EXIT...\n");
continue;
}
printf("SUM(%d,%d) = %d\n",n1,n2,n1+n2);
} while (getch()!='*');
return 0;
}Nos, első ránézésre hibátlan, de mégsem. A következőképp működik az adott értékek mellett:
ha 5,7 akkor hibátlanul fut
ha 12345678901,12345678901, akkor hibás eredmény
ha a,b akkor hibás működés
ha 5.0,7.0 akkor hibás működésA hibás értékkel nem kell foglalkozni, az nyílvánvaló, azonban mi okozza a hibás működést? Nos annyit elárulok hogy a STDIN.
Természetesen nem Tőletek kérdem a megoldást(hisz biztosan tudjátok), hanem azoktól a leendő programozópalántáktól akik most ismerkednek a C-vel, és remélhetőleg elolvassák mások szakmai hozzászólását.
Szóval ezzel csak azt akartam illusztrálni, hogy kézenfekvő alap C input fx-ek is megtudják nehezíteni az ember életét, és ráadásul ezt úgy teszik hogy amúgy a kód hibátlan(vagy annak tűnik)Nos ezért szoktam kezdő programozóknál inkább a GETS-et alkalmazni.
Fire.
-
-
válasz
cellpeti #538 üzenetére
Hali!
Gyorsan megcsináltam(több megoldás is létezik persze), mielött ellépek itthonról. Ha valami nem tiszta írj. Késő este vagy holnap leszek majd.
(mivel ez csak példa, nem foglalkoztam azzal hogy kitudja mekkora számot lehessen beírni, ezért 2 gigánál nagyobbat ne írj be, mert hibásan fog működni. Bár kipróbálhatod)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define C_Y 14
int cimlet[C_Y] = {20000,10000,5000,2000,1000,500,200,100,50,20,10,5,2,1};
int hanyszor[C_Y] = {0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0,0,0};
int main()
{
long int i, cash;
char money[255];
printf("Enter money: ");
if (!strlen(gets(money))) {
printf("\n\nMoney not found...EXIT");
return -1;
}
printf("\n\n");
for (i=0;i<strlen(money);i++)
if(money[i]<'0' || money[i]>'9') {
printf("Is NAN [Not A Number]...\nEXIT");
return -1;
}
cash=atoi(money);
for (i=0;i<C_Y;i++) {
hanyszor[i]=cash / cimlet[i];
cash-=hanyszor[i]*cimlet[i];
if (hanyszor[i]) printf("%5d db\t %d\n",hanyszor[i],cimlet[i]);
}
return 0;
}Fire.
-
válasz
speedtouch #522 üzenetére
Hali!
A kód Code::blocks-ban íródott, sima Ansi C. Ha valami nem érthető esetleg, akkor írj nyugodtan.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CS_Y 38
#define CS_X 5
int LCD_Digits[CS_X][CS_Y]={
{0x20,0xC9,0xCD,0xBB, 0x20,0xCB, 0x20,0xCD,0xCD,0xBB, 0x20,0xCD,0xCD,0xBB, 0x20,0xCB,0x20,0xCB, 0x20,0xC9,0xCD,0xCD, 0x20,0xC9,0xCD,0xCD, 0x20,0xCD,0xCD,0xBB, 0x20,0xC9,0xCD,0xBB, 0x20,0xC9,0xCD,0xBB},
{0x20,0xBA,0x20,0xBA, 0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0xBA,0x20,0xBA, 0x20,0xBA,0x20,0x20, 0x20,0xBA,0x20,0x20, 0x20,0x20,0x20,0xBA, 0x20,0xBA,0x20,0xBA, 0x20,0xBA,0x20,0xBA},
{0x20,0xBA,0x20,0xBA, 0x20,0xBA, 0x20,0xC9,0xCD,0xBC, 0x20,0xCD,0xCD,0xB9, 0x20,0xC8,0xCD,0xB9, 0x20,0xC8,0xCD,0xBB, 0x20,0xCC,0xCD,0xBB, 0x20,0x20,0x20,0xBA, 0x20,0xCC,0xCD,0xB9, 0x20,0xC8,0xCD,0xB9},
{0x20,0xBA,0x20,0xBA, 0x20,0xBA, 0x20,0xBA,0x20,0x20, 0x20,0x20,0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0xBA,0x20,0xBA, 0x20,0x20,0x20,0xBA, 0x20,0xBA,0x20,0xBA, 0x20,0x20,0x20,0xBA},
{0x20,0xC8,0xCD,0xBC, 0x20,0xCA, 0x20,0xC8,0xCD,0xCD, 0x20,0xCD,0xCD,0xBC, 0x20,0x20,0x20,0xCA, 0x20,0xCD,0xCD,0xBC, 0x20,0xC8,0xCD,0xBC, 0x20,0x20,0x20,0xCA, 0x20,0xC8,0xCD,0xBC, 0x20,0xCD,0xCD,0xBC}
};
int main()
{
int i,j,LCD_Digit_Index,LCD_Digit_Width,k;
char num[255];
printf("Type INTEGER number: ");
if (!strlen(gets(num))) {
printf("\n\nINTEGER not found...\nShow all LCD digits and EXIT\n\n");
for (i=0;i<CS_X;i++) {
for (j=0;j<CS_Y;j++)
printf("%c",LCD_Digits[i][j]);
printf("\n");
}
return -1;
}
printf("\n\n");
for (i=0;i<strlen(num);i++)
if(num[i]<'0' || num[i]>'9') {
printf("Is NAN [Not A Number]...\nEXIT");
return -1;
}
for (i=0;i<CS_X;i++) {
for (j=0;j<strlen(num);j++) {
LCD_Digit_Index = num[j]-'0'>1 ? (num[j]-'0')*4-2 : (num[j]-'0')*4;
LCD_Digit_Width = num[j]-'0'==1 ? 2 : 4;
for (k=0;k<LCD_Digit_Width;k++)
printf("%c",LCD_Digits[i][LCD_Digit_Index+k]);
}
printf("\n");
}
return 0;
}Fire.
-
válasz
speedtouch #520 üzenetére
Hali!
Így már más, LCD nem LDC, így érthető....NET-be sajna nem tudok segíteni(ezért most nem pakolom fel a VS-t), de ha sima C megfelel, akkor oké.
Fire.
-
válasz
speedtouch #518 üzenetére
Hali!
Sajna VS-ben nem dolgozom, de ha egy példával illusztrálnád, hogy VS-ben mi is az a LDC formátum, az sokat segítene...
pl: 1234567 a szám és ebből lesz 1980.01.01 vagy valami
Fire.
-
-
válasz
Fire/SOUL/CD #513 üzenetére
Hali!
Küldtem privbe.
Fire.
-
-
válasz
rothkrisz #511 üzenetére
Hali!
Kellemes feladatokat kaptok, nekem is jó, mert "retrózhatok".
Nos, több megoldása is lehet a feladatnak, Én az alábbi módszert választottam, elsősorban mert x64 Vista alatt ne futnak a DOS-os c/cpp editorok, ebből adódóan a kurzorpozicíóval, assembly betéttel, megszakításokkal nem tudok mit kezdeni.(ugyanis úgy is meg lehetett volna oldani, hogy egyből megjelenik a tábla, és egyből megjelenik rajt a bevitt mezőn az "érme"....)Lesz bent egy teljesen kikommentezett rész, azt csak azért hagytam bent, hogy még egy mátrix definíciót is láss. Sajna ott viszont már "keményen" mútatókkal lehet volna csak operálni, és ha valaki nincs tisztában velük, akkor tényleg nem fog érteni belőle semmit....
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define CB_XY 17
/*
unsigned char ChessBoard_Matrix[][CB_XY]={
"╔","═","╦","═","╦","═","╦","═","╦","═","╦","═","╦","═","╦","═","╗",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╠","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╬","═","╣",
"║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║"," ","║",
"╚","═","╩","═","╩","═","╩","═","╩","═","╩","═","╩","═","╩","═","╝"
};
*/
int ChessBoard_Matrix[CB_XY][CB_XY]={
{0xC9,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xCB,0xCD,0xBB},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xCC,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xCE,0xCD,0xB9},
{0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA,0x20,0xBA},
{0xC8,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xCA,0xCD,0xBC}
};
int main()
{
int i,j,k;
char str[256];
while(0==0) {
printf("Enter coordinate and value: ");
strupr(gets(str));
if (str[0]=='*') { printf("\nGenerating Chessboard\n\n"); break; }
if (!strlen(str) || strlen(str)>3) { printf("Bad SIZE found [%s=>%d], skipped...\n",str,strlen(str)); continue; }
if (str[0]<'A' || str[0]>'H') { printf("Bad COLUMN found [%c], skipped...\n",str[0]); continue; }
if (str[1]<'1' || str[1]>'8') { printf("Bad ROW found [%c], skipped...\n",str[1]); continue; }
if (str[2]!='1' && str[2]!='2' && str[2]!='5') { printf("Bad VALUE found [%c], skipped...\n",str[2]); continue; }
ChessBoard_Matrix[('8'-str[1])*2+1][(str[0]-'A')*2+1]=str[2];
}
for(i=0,k=8;i<CB_XY;i++) {
if ((i % 2)) printf("%d ",k--);
else printf(" ");
for(j=0;j<CB_XY;j++)
printf("%c",ChessBoard_Matrix[i][j]);
printf("\n");
}
for(printf(" "),i=0;i<8;printf("%c ",'A'+i),i++);
printf("\n\n");
return 0;
}Fire.
UI: remélem jól értelmeztem a feladatot...
-
Hali!
Hát szomorú ha nem hallottál róla, a MATH.H-ban van. Egy lebegőpontos számot "oszt" két részre, egész ill törtrészre. (vagy egyszerűbben a tizedespont jobb oldalára ill bal oldalára)
persze abban egyetértek, hogy eldönteni egy számról, hogy páros vagy páratlan tök felesleges használni(de lehet)Fire.
UI: amargo kódja, már kerekítéssel is foglalkozik(0,5-től felfelé kerekítünk, egyébként meg lefeleé)
Annyi "kritika", ha valami NEM NAGYOBB EGYENLŐ MINT 0,5, akkor felesleges az ELSE után az összehasonlítás....(Amargo kódjáról van szó)
-
Hali!
Nincs baj azzal a strupr() függvénnyel, csak a bemenete (char*). Így használd:
#include <iostream>
using namespace std;
int main()
{
char str[]="Test text";
cout << strlwr((char*)str) << endl;
cout << strupr((char*)str) << endl;
return 0;
}Ebből gondolom nyílvánvaló, hogy mit kell módosítanod a kódodban.
Azonban ez valóban C programozás topic, van C++ topic is, oda tedd a C++ kérdéseket.
Ígérem ott is ránézek, és ha tudok segítek.Fire.
-
válasz
!wannabe #489 üzenetére
Hali!
Az ndx tömben van tárolva ugyebár, hogy melyik számjegy hányszor fordul elő.
Mivel én STRING-ként olvasom be, ezért a '0'-'9' számjegyek a karakterkódjukkal vannak jelen a STRING-be, vagyis hexa 0x30-0x39. Ebből kell 0-9 indexet csinálni.
pla '9' ascii kódja 0x39 binárisan 00111001, a 0x0f binárisan 00001111
00111001 AND 00001111 = 0000 1001 azaz 9.
( az AND ott lesz 1, ahol mindkét számban az azonos bitpozíción 1 van)
tehát ebben az esetben az ndx[str[i] & 0x0f]++ az ndx[9]++ lesz, azaz a tömb 9. indexén lévő elem értékét megnöveli egyel.Meg lehetett volna így is oldani ndx[str[i]-0x30]++ vagy ndx[str[i]-'0']++
Csak azért választottam az AND-es módszert, mert a logikai műveletek fontos része minden programozási nyelvnek(AND, OR, XOR, NOT stb)Fire.
-
-
válasz
!wannabe #484 üzenetére
Hali!
Újra kellet pakolnom a vista-t, és még nem raktam fel a VS-t. (de lehet hogy nem is fogom, csak ha kell). Jó ez a CodeBlocks
(Kösz mégegyszer, hogy javasoltad!)
Ez a példa, függölegesen, meg vizszintesen is kiírja a számokat ill kirajzolja a csillagokat......
(Horizontal/Vertical rész)
Valamit félreértettem?Fire.
-
válasz
rothkrisz #482 üzenetére
Hali!
A progi CodeBlocksban íródott. Bár írtad, hogy most kezdtél C-ben írni, de ennak ellenére úgy írtam, hogy legyen bent valami "újdonság" is, ami hasznos. Nézd át, ha valami nem tiszta írj.
Fire.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char str[255];
unsigned char ndx[10];
int i,j,maxndx;
for(i=0;i<sizeof(ndx);ndx[i]=0, i++);
printf("Enter numbers (0-9): ");
gets(str);
for (i=0;i<strlen(str);i++) {
if (str[i]<'0' || str[i]>'9') {
printf("Illegal char found, skipped.. -> %c\n",str[i]);
continue;
};
ndx[str[i] & 0x0f]++;
}
//Horizontal
for(i=0;i<sizeof(ndx);i++) {
printf("\n%c ",i+'0');
for (j=ndx[i];j>0;j--) { printf("*"); }
}
printf("\n\n\n");
//Vertical
for(i=0, maxndx=0;i<sizeof(ndx);i++) {
maxndx=ndx[i]>=maxndx ? ndx[i] : maxndx;
}
for(;maxndx>0;maxndx--) {
for(i=0;i<sizeof(ndx);i++) {
ndx[i]<maxndx ? printf(" ") : printf("*");
}
printf("\n");
}
for(i=0;i<sizeof(ndx);printf("%c",'0'+i),i++);
printf("\n");
return 0;
} -
válasz
!wannabe #480 üzenetére
Rendben, csak azért kérdeztem, mert én teljesen megszokásból, használok cikluson belül deklarációt. PL: for(int i=1;i<=10;i++); Na ezt alapban a Dev c++ nem szereti, mert nem a régi c89 módot használja, hanem a c99-et. Ilenykor ezt a hibát dobja:
for loop initial declaration used outside C99 modeA "hiba" megszüntethető, ha a compiler parancssorához hozzáadod a -std=c99 utasítást vagy kapcsolót, ahogy tetszik.
A CodeBlocks nem tudom, hogy foglalkozik-e vele, próbáld ki...
Fire.
UI: Amúgy VS c++-ban írok C-t(most ismerkedem a környezettel), de a Dev c++ is fent van.
-
-
válasz
!wannabe #474 üzenetére
Nos, egy sakktábla 8x8-as, gondolom ez nem ujdonság, tehát kell egy plusz sor az oszlop azonosítóknak (A-H) ill egy plusz oszlop a sor azonosítóknak(1-8).
Viszont a oszlopnevek meg sorszámok (ha már nagyon szakszerűen akarsz eljárni), nem hasraütésre megy. Ha leraksz magad elé egy táblát, akkor a feléd eső oldalon a bal kezednél van az A1, ami fekete.(esetleg ha ki is akarod szinezni).
Ha akarod tömbözhetsz is, de felesleges(ha csak nincs a tarsojodba valami más terv is a táblával kapcsolatban), simán minden sornál 8-től lefelé ill minden oszlopnál A-H ig kiírod pluszba.Fire.
Közbe beugrott a kód, megnézem
-
-
válasz
!wannabe #469 üzenetére
Hali!
Én magam(már nem tudom pontosan mikor,de a 80-as évek közepe vége felé) C64-en kezdtem el programozni, assembly-ben. Volt egy kis csapat, amiben én a 1541-II-drive-ért voltam felelős, tehát lemezes műveletek. Akkor írtam az első 4 másodperces formattert, a 10 másodperces validator, a 14-szeres irq loadert(miközben szól a zene, tölt a drive) stb.
Az egyik csapattag megvette első PC-jét(486dx4-100, 4 mega ram, 2x sony cd olvasó, s3 1megás vga, tomato alaplapmeg talán seagate vinyó), tudtam nekem is kell PC. Természetesen Assembly egyből, alig vártuk hogy a gamestar meg chip meg egyéb újságok lemezmellékleteit megnézhessük, mert nagyon sok hasznos uty ill doksi volt rajtuk.
Borland assemblerrel kezdtem, aztán borland pascal, borland c/c++, borland delphi, borland builder.....és jelenleg is borland(ill. mostmár Codegear) cuccokkal dolgozom.Persze, én is assemblyben meg más nyelven is úgy kezdtem, hogy "töröljük le a képernyőt, írjuk ki hogy Helló!". Akkoriban a net nem volt elterjedt, hogy úgy mondjam csak a "kiváltságosok" rendelkeztek vele, elsősorban anyagi ill technikai feltételek miatt. Így lemezmellékletekről meg szakirodalomból tanultunk magunktól. Ha minden könyvet eladnék, ami most a szekrényen van, egy igen jó konfigot tudnék venni..., de nem adom.
Sajnos a középiskolában szinte megutáltatták a informatikát ill matekot(ami abban merült ki, hogy valami videoton gépen egymás alá meg mellé kiirattuk 1-10-ig a számokat
).
Sajnos azt látom, hogy jelengleg is ez a legnagyobb probléma, hiába van tehetsége, szorgalma, kitartása a számítástechnika(ezen belül programozás) iránt, a középiskolákban elveszik az ember kedvét tőle. Rossz tananyag, rosszul leadott jó tananyag, diákok érdektelensége....és még sorolhatnám.Neked anyyit javasolnék és minden kezdőnek, hogy a nyelv alapjait kell első körben tökéletesen elsajátítani, megérteni. Aztán ahhoz a nyelvhez kiválasztani a megfelelő fejlesztőkörnyezetet, amikor ez megvan, kitartani a Cég mellett, mert akár mennyire is szabvány pl a C++, de az jól látszik, hogy mennyire eltérnek a fejlesztőkörnyezetek egymástól. Itt a net, tessék használni, mindent meg lehet rajt találni. Aztán meg tessék kérdezni PH-en!(nekünk anno 30km-en belül nem volt senki, akit megkérdezhettünk volna
) Nem érdekes, ha értelmetlen dolgot kérdezel, akkor megmondják hogy ez értelmetlen, ezért meg ezért meg ezért, és így meg így kellene megoldani.
Én is sok mindent megkérdezek és mindig kapok rá választ, sok mindent tanulok itt, noha elég rég óta üzöm az "ipart". Ebben a szakmában, minden nap jönnek ki újdonságok, fizikai képtelenség, hogy mindenhez értsen az ember.Van jó és van rossz tutorial. Én azokat létesítem előnyben, ahol képpel illusztrált, lépésről-lépésre magyarázó, forráskóddal fűszerezett(amit beillesztesz aztán műxik) stb dolgok találhatóak. Az egyik ilyen kedvenc oldalam ez: [www.functionx.com/]
Fire.
-
-
Hali!
Sajna erre nem kaptam választ:
"hogyan kell Visual C# 2008-ban Console Application-t létrehozni, amiben a PRINTF használható, nem a WRITELINE."
igen, az a gáz hogy ez is ebből "él"
"A project for creating a command-line application (.NET Framework 3.5)"
Így hozza létre a Console Application-t.
Erre van valami ötleted?Fire.
UI: Amúgy szakmádban(okleveles programozó) dolgozol, esetleg szabadúszó vagy?
-
Hali!
Bevallom a a VS C++ részével nem is foglalkoztam, engem a VS C# project érdekelt, mivel ez C topic. Megtisztelnél vele rendszerprogramozó kolléga(amúgy tényleg az vagy?), ha leírnád, hogyan kell Visual C# 2008-ban Console Application-t létrehozni, amiben a PRINTF használható, nem a WRITELINE.
Fire.
UI: utánanéztem amit írtál, ha Win32 Console App van létrehozva akkor "megy" a műsor, mármint VS c++-ban.
-
Hali!
Biztos igazad van. Sajna nem ismerem(nem használom) ezeket a fejlesztőkörnyezeteket.
Azért bátorkodtam ezen kódokat berakni, mert Daneeka korábban arról "panaszkodott", hogy nem tudja befordítani a project-jét, ezeket meg belehet. Tehát lássa, hogy így kellene kinézni a forrásnak.
Amúgy Borland Delphi 7, Codegear Builder ill Assembler-ben írogatok, amikor ilyen melót kapok.(Rendszerprogramozó szakon végeztem 12 éve)A Dev c++ ill VS2008 csak azért raktam fel, mert mostanában sok pl diplomamunkát hoznak hozzám átnézésre vagy javításra, amit ezekben a környezetekben írnak.
(VS esetén lehet mint újra tanulni, de sebaj szeretem a kihívásokat)
Fire.
-
-
Hali!
Hát ime az összehasonlítás. Mindegyik fejlesztőkörnyezetben CONSOLE APPLICATION PROJECT van létrehozva
Dev c++ C PROJECT
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("Hello Daneeka!\n");
printf("Press ANY KEY to continue...");
getchar();
return 0;
}Visual Studio C# 2008
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello Daneeka!");
}
}
}Dev C++ C++ PROJECT
#include <iostream>
using namespace std;
int main (int argc, char *argv[])
{
cout << "Hello Daneeka!" << endl;
cout << "Press ANY KEY to continue..." << endl;
cin.get();
return 0;
}Visual Studio C++ 2008
// Fire.cpp : main project file.
#include "stdafx.h"
using namespace System;
int main(array<System::String ^> ^args)
{
Console::WriteLine("Hello Daneeka!");
return 0;
}Szerintem is maradjunk a Dev c++-nál, aztán majd segítünk átalakítani Visual Studios-ra.
Fire.
Ú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!
- Szép! HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 32/512 Iris Xe FHD Magyar
- HP EliteBook 850 G8 Fémházas Multimédiás Laptop 15,6" -65% i7-1185G7 8/512 Iris Xe FHD Magyar
- 512 Gb-os NVME-k
- Eladó autós gyerekülések, Römer és Peg-Pérego márkák
- ASUS TUF Gaming A15 FA506 - 15,6"FHD IPS 144Hz - Ryzen 5 7535HS - 16GB - 512GB - RTX 3050 -3 év gari
- AKCIÓ! ASUS PRO WS W790E-SAGE SE alaplap garanciával hibátlan működéssel
- Bomba ár! Lenovo ThinkPad L480 - i5-8GEN I 8-16GB I 256GB SSD I 14" FHD I HDMI I Cam I W11 I Gari!
- AKCIÓ! VALVE INDEX virtuális valóság szemüveg garanciával hibátlan működéssel
- AKCIÓ! Apple Macbook Pro 16" 2019 i7 9750H 32GB 500GB Radeon Pro 5300M hibátlan működéssel
- Samsung Galaxy A12 64GB, Kártyafüggetlen, 1 Év Garanciával
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: Promenade Publishing House Kft.
Város: Budapest