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
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- 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
Általános témák
LOGOUT.hu témák
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [attilasd:] A laposföld elmebaj: Vissza a jövőbe!
- [Re:] [Szevam:] Érzelmi magabiztosság/biztonság - miért megyünk sokan külföldre valójában?
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [Luck Dragon:] MárkaLánc
- [Re:] PLEX: multimédia az egész lakásban
- [Re:] eBay-es kütyük kis pénzért
- [Re:] Elektromos rásegítésű kerékpárok
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
Pl az elsőt megcseréled az utolsóval, a másodikat az utolsó előttivel stb. (úgy, hogy a láncolt listasága ne sérüljön)
Értelem szerűen páros/páratlan elemszámnál kicsit másképp kell eljárni.
¯\_(ツ)_/¯
Jester01
veterán
Akkor hülyék. A segédlistát általában azért tiltják mert memóriaigénye van. Ha viszont az eredeti listát használod, akkor nincs plusz memóriaigény.
Jester
Korcsii
őstag
Duplán láncolt lista?
Jester01
veterán
Gondolom nem. Azt eleve meg sem kell fordítani, de ha mégis, azt is igen egyszerű.
Jester
szkorhetz
őstag
Esküszöm, így csináltam..
Sk8erPeter
nagyúr
Ja értem, akkor ezek szerint az eredeti kódod is egy formázatlan hányadék?
Sk8erPeter
szkorhetz
őstag
Én ezt nem tudom, két hónapja tanulom a c-t..
Feribacsi555
senior tag
Sziasztok!
A feladatom az hogy egy adott függvényt egy adott intervallumon belül kiszámoljon. Meglehet adni, hogy mekkora értékenként számoljon. Az a gondom, hogy néha ezt írja ki számok helyett:
-1.#IND0
Ez mit jelent?
Jester01
veterán
Google ( ) szerint:
Indeterminate.
Result cannot be represented in a floating point register.
Most likely the result of 0/0, sqrt(-1) or similar.
Magyarul nullával osztottál, negatív számból gyököt vontál vagy hasonló - valós számokon - érvénytelen művelettel próbálkoztál.
Jester
Feribacsi555
senior tag
Ahham, köszi, 0-val való osztásnál hibát vág ki, de a többinél nem
(#2961) Feribacsi555 válasza Feribacsi555 (#2960) üzenetére
Feribacsi555
senior tag
Amúgy nekem ezt írja a google:
A keresett kifejezés (-1.#IND0) egyetlen dokumentumban sem található meg.
Jester01
veterán
A mínusz jel speciális guglinak, idézőjelbe kell az egészet tenni.
Jester
szkorhetz
őstag
Sziasztok!
Ebben a feladatban, futtatási időben történő adatbázishoz kellene törlés lehetőséget biztosítani adatokhoz. Hogyan lehetséges?
Köszönöm szépen
LumberJack
csendes tag
Sziasztok! Nekiálltam írni egy programot, és szeretnék a konzolban színes képeket megjeleníteni karakterek segítségével. Nyilván elég limitált a képek minősége, de pont ilyen retro hangulatra törekszem. Az egyetlen gond azonban, hogy a megrajzolt képeket ANSI fileban menti a rajzprogram(PabloDraw). Ebből kéne nekem valahogy kibányászni a karakterek színeit, magukat a karaktereket stb, stb. Azt akarom kérdezni, hogy tudtok-e valami módszert, amivel a problémát viszonylag egyszerűen meg lehet oldani? Köszi előre is!
LumberJack
csendes tag
Az előző problémát sikerült már megoldanom, de most csak sikerült valami nevetségesen egyszerű dolgon elcsúsznom. A problémám a következő: szeretnék egy függvényt csinálni, ami file-ból behúzza az adatokat, majd egy kétdimenziós tömbben eltárolja azokat. A file csak space-ekkel elválasztott egészeket tartalmaz, pontosan 1760 db-ot (80x22). A következőt sikerült összehoznom, de valamiért kifagy, és egyszerűen képtelen vagyok rájönni, hogy miért.
int main()
{
int tomb[22][81];
int v, y = 0, x = 0, p;
FILE *szoveg;
szamok = fopen("adat.dat", "rb");
for (p = 0; p < 1760; p++) {
fscanf(szamok, "%d", &v);
if (x == 80);
{
x = 0;
y++;
tomb[y][x] = v;
}
if (x < 80) {
tomb[y][x] = v;
x++;
}
}
y = 0;
x = 0;
for (p = 0; p < 1760; p++) {
if (x == 80) {
x = 0;
y++;
printf("%d", tomb[y][x]);
}
if (x < 80) {
printf("%d", tomb[y][x]);
x++;
}
}
return 0;
}
A második for ciklusnak csak ellenőrző szerepe van. Azzal iratom ki a tömb tartalmát.
[ Szerkesztve ]
Jester01
veterán
Például azért, mert az első if blokk x == 80 esetén kinullázza az x-et, amitől persze teljesülni fog az x < 80 feltétel és a második blokk is végrehajtódik. Esetleg simán else ágat kellene használni (vagy átírni kevésbé kacifántos megoldásra).
Jester
(#2967) WonderCSabo válasza LumberJack (#2965) üzenetére
WonderCSabo
félisten
Ez sztem le se fordul, mert a szamok valtozó sehol sem volt deklarálva. Egyébként miért az ifekkel szórakozol, miért nem csinálod a beolvasást/kiírást beágyazott ciklussal?
LumberJack
csendes tag
Köszi, megoldódott, az életben nem vettem volna észre.
(#2969) LumberJack válasza WonderCSabo (#2967) üzenetére
LumberJack
csendes tag
Nálam nem ezek vannak, csak elég hülye neveket szoktam adni a változóknak (mérgemben meg vállalhatatlanokat), gondoltam átírom tisztességesre, mielőtt feldobom ide, csak figyelmetlen voltam
moha21
addikt
Sziasztok! Kb. ~5-6 éve programoztam utoljára C-ben, szóval eléggé hiányos már a tudásom.
ascii karaktereket szeretnék fáljba írni ( arra emlékszem, hogy lehet fájlba írni, de már arra nem, hogy hogyan is )
BorlandC a fejlesztőkörnyezet még jó régen írtam rá ezt a programot.:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
main()
{
window(1,1,80,25);
textbackground(0);
clrscr();
int a=1;
for(;;a++)
{
clrscr();
printf("\ntizes sz mrendszerben: %i\ntizenhatos sz mrendszerben: %X\nA karakter: %c",a,a,a);
getch();
}
}
nem szép, de működik, szóval ezt kellene fájlba menteni. Nyilván meg tudnám egyedül is oldani, de hátha így gyorsabb lesz.
Nem az az igazi férfi aki minden nőt meghódít, hanem aki ismeri a nagyfeszültségű földkábelek szigetelésének technikáját.
WonderCSabo
félisten
fprintf fv a barátod.
moha21
addikt
Köszi! Argomentum az u.a. mint a sima print fv.?
Nem az az igazi férfi aki minden nőt meghódít, hanem aki ismeri a nagyfeszültségű földkábelek szigetelésének technikáját.
WonderCSabo
félisten
moha21
addikt
Köszi, működik! közben rájöttem a Borland C-ben majd az össze függvényre van példa is.
DE az fprint-re már nem is emlékeztem, anno suliban kellett csinálni alacsony magasszintű, de alig maradt meg belőle valami.
Nem az az igazi férfi aki minden nőt meghódít, hanem aki ismeri a nagyfeszültségű földkábelek szigetelésének technikáját.
dany27
őstag
Sziasztok!
Írtam C-ben egy morse kód ellenőrző progit bináris fát használva de egy érdekes anomáliába futottam....
Ha beadom az a kódot neki hogy .-. akkor kidobja hogy ez az R betű kódja... de ha beírom neki azt hogy .-.- akkor azt mondja hogy G pedig ilyen morse küd nem is létezik....
Sőt mi több a G az pont a fa másik oldalán van.... Már a legelelején pont ellentétes irányba kellene elindulni hogy G-t kapjunk... elméletileg a .-.--nak null pointert kéne hogy adjon mivel a .-. az R betű és utánna nincs már semmi sem...
Hol csesztem el?
Ez a rész ellenőrzi hogy van e ilyen morse kód(megpróbálja a beadott kód szerint bejárni a fát):
void check(Fa *gyoker,char kod[7])
{
Fa *hely;
int i=0;
hely=gyoker;
while(kod[i]!='\0')
{
if(kod[i]=='.')
hely=hely->jobb;
else
hely=hely->bal;
i++;
}
if(hely!=NULL)
printf("\n%c",hely->betu);
else
printf("\nA megadott morse kod helytelen!");
}
A fa jól van feltöltve az elemekkel!
Gyuri16
senior tag
a jobb es bal ki van nullazva a levelekben? azon kivul a while ciklusban jo lenne ellenorizni, hogy a hely pointer nem null-e (ha egy hosszu kodot adsz neki meghal nullpointer dereferenciaval vagy segfaulttal)
Nem vagyok egoista, csak uborkagyalu!
dany27
őstag
Így töltöm fel:
void beilleszt(Fa* gyoker, char betu, char *kod)
{
Fa *hely, *elozo;
int i=0;
hely=gyoker;
while (kod[i]!='\0')
{
elozo=hely;
if (kod[i]=='.')
hely=hely->jobb;
else
hely=hely->bal;
if (hely==NULL)
{
hely=uj();
if (kod[i]=='.')
elozo->jobb=hely;
else
elozo->bal=hely;
}
i++;
}
hely->betu=betu;
}
Gyuri16
senior tag
ott ahol az uj helyet hozod letre nullazni kell a jobb es bal pointereket. nem tudom, hogy nez ki az uj() fuggvenyed, ott lehetne ezt csinalni.
Nem vagyok egoista, csak uborkagyalu!
dany27
őstag
uj fgv-ben kivan nullazva mind2, tehát a jobb és a bal is.
Amúgy így néz ki:
Fa* uj()
{
Fa* elem=(Fa*)malloc(sizeof(Fa));
elem->jobb=NULL;
elem->bal=NULL;
return elem;
}
Jester01
veterán
De mi a fenéért kell már megint a teljes kódot folytatásokban, külön könyörgésre elküldeni?
Addig is amíg egyszercsak végre megkapjuk, használj egy debuggert.
Jester
dany27
őstag
Elnézést! Csak azt hidtem hogy valamit a check fgv-ben rontottam el, de aztán kiderült hogy nem és akkor már nem tudtam szerkeszteni a régebbi hozzászólásomat.
Raktam egy if-et oda ahol elhelyezi a betűt a fában,
azért hogy megbiznyosodjak róla hogy a fa jobb vagy bal oldalára rakja... De egy kicsit érdekes lett a végeredmény.
Nem mindegyik betűt tölti fel valamiért, mert sem a bal sem a jobb nem teljeseül....
Erre gondoltam debuggernak a kódba:
if (elozo->bal)
{
hely->betu=betu;
printf("\nBal: %c",betu);
}
else if(elozo->jobb)
{
hely->betu=betu;
printf("\nJobb: %c",betu);
}
E szerint minden elem jó helyre kerül szval a feltöltéssel elvileg nem lehet gond...
Jester01
veterán
De még mindig nem kaptunk teljes listát. Amit le tudunk fordítani és futtatni.
Jester
dany27
őstag
Íme:
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<string.h>
#define ESC 27
#define ENTER 13
#define BS 8
typedef struct ag{
char betu;
struct ag *jobb,*bal;
} Fa;
Fa* uj()
{
Fa* elem=(Fa*)malloc(sizeof(Fa));
elem->bal=NULL;
elem->jobb=NULL;
return elem;
}
void insert(Fa* root, char betu, char *kod)
{
Fa *hely, *elozo;
int i=0;
hely=root;
while (kod[i]!='\0')
{
elozo=hely;
if (kod[i]=='.')
hely=hely->jobb;
else
hely=hely->bal;
if (hely==NULL)
{
hely=uj();
if (kod[i]=='.')
elozo->jobb=hely;
else
elozo->bal=hely;
}
i++;
}
hely->betu=betu;
}
void check(Fa *root,char kod[7])
{
Fa *hely;
int i=0;
hely=root;
while(kod[i]!='\0' && hely!=NULL)
{
if(kod[i]=='.')
hely=hely->jobb;
else
hely=hely->bal;
i++;
}
if(hely!=NULL)
printf("\n%c",hely->betu);
else
printf("\nA megadott morse kod helytelen!");
}
void fill(Fa* root)
{
insert(root, 'A', ".-");
insert(root, 'B', "-...");
insert(root, 'C', "-.-.");
insert(root, 'D', "-..");
insert(root, 'E', ".");
insert(root, 'F', "..-.");
insert(root, 'G', "--.");
insert(root, 'H', "....");
insert(root, 'I', "..");
insert(root, 'J', ".---");
insert(root, 'K', "-.-");
insert(root, 'L', ".-..");
insert(root, 'M', "--");
insert(root, 'N', "-.");
insert(root, 'O', "---");
insert(root, 'P', ".--.");
insert(root, 'Q', "--.-");
insert(root, 'R', ".-.");
insert(root, 'S', "...");
insert(root, 'T', "-");
insert(root, 'U', "..-");
insert(root, 'V', "...-");
insert(root, 'W', ".--");
insert(root, 'X', "-..-");
insert(root, 'Y', "-.--");
insert(root, 'Z', "--..");
insert(root, '0', "-----");
insert(root, '1', ".----");
insert(root, '2', "..---");
insert(root, '3', "...--");
insert(root, '4', "....-");
insert(root, '5', ".....");
insert(root, '6', "-....");
insert(root, '7', "--...");
insert(root, '8', "---..");
insert(root, '9', "----.");
insert(root, '.', ".-.-.-");
insert(root, ',', "--..--");
insert(root, ':', "---...");
insert(root, '?', "..--..");
insert(root, '-', "-....-");
insert(root, '/', "-..-.");
insert(root, '(', "-.--.-");
insert(root, '@', ".--.-.");
insert(root, '=', "-...-");
}
void clreol()
{
int i;
printf("\r");
for(i=1;i<80;i++)
{
printf(" ");
}
printf("\r");
}
void felszabadit(Fa *root)
{
if (root==NULL)
return;
felszabadit(root->jobb);
felszabadit(root->bal);
free(root);
}
int main()
{
Fa* root=uj();
char beolv[7];
int index=0;
int key=0;
fill(root);
printf("Morse kod ellenorzo! Adatbevitel megszakitalsa az ESC lenyomasaval!\n");
printf("Morse kod: ");
do
{
key=getch();
if(((key>=45) && (key<=46)) && (index<6))
{
beolv[index]=(char)key;
index++;
printf("%c",(char)key);
}
else if(key==BS && strlen(beolv)>0)
{
beolv[index-1]=(char)0;
index--;
clreol();
printf("Morse kod: %s",beolv);
}
}while((key!=ESC) && (key!=ENTER || index==0));
beolv[index]='\0';
if(key==ENTER)
check(root,beolv);
else
printf("Adatbevitel megszakitva");
felszabadit(root);
return 0;
}
Ezzel próbáljátok ki:
.-. Ez elvileg R betűt ad ami helyes.
.-.- Ez G-t ad ami nem helyes mivel a G morse kódja --. és ha ezt beírom erre is G-t ad!
[ Módosította: #65675776 ]
Gyuri16
senior tag
tanulj meg debuggert hasznalni. ket printf az nem debuggolas.
mi tortenik ha .-.- a bemenet? nem NULL lesz az eredmeny, mert a fadban van ilyen ag a "." karakter miatt aminek a kodja ".-.-.-" tehat a vegen egy olyan betut fogsz kapni ami abban a structban volt. mivel olyan morze kod nincs, ezert valami veletlent kapsz. innen mar gondolom egyertelmu..
Nem vagyok egoista, csak uborkagyalu!
dany27
őstag
Okés! köszi szépen! Már teljesen világos!
Darkzbane
tag
Olyan kérdésem lenne hogy adott C programozási feladat elkészítését (pénzért természetesen) vállalná e valaki?
vanek
tag
Van egy programom..amely sztringet keres egy adott sztringben..
a problémám, hogy mikor beadom a programot a netes program tesztelőbe, akkor 5 pontra azt írja ki, hogy hibás eredmény..gondolom 5 példa hibás..de sajnos nem tudok rájönni, hogy milyen fajta példák lehetnek azok..
a programom..
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int vizsgal(char s1[], char d1[])
{
int i,j;
for(i=0; i<strlen(s1); i++)
{
if (s1[i]==d1[0])
{
for(j=1;j<strlen(d1);j++)
{
if ((s1[i+j]!=d1[j]) || ((i+j)>strlen(s1)-1)) break;
if (j==strlen(d1)-1) return i;
}
if (strlen(d1)==1) return i;
}
}
return -1;
}
int main()
{
FILE *f,*fk;
char s[256],d[256],e[261];
char ch;
int i,j,kimenet=0;
fk=fopen("ki.txt", "wt");
f=fopen("be.txt", "rt");
if(f==NULL)
{
exit(-1);
}
fgets(s,256,f);
fgets(d,256,f);
kimenet=vizsgal(s,d);
printf("%i",kimenet);
if (kimenet!=-1)
{
strcpy(e,"IGEN ");
for (i=0;i<kimenet;i++)
{
e[i+5]=s[i];
}
e[kimenet+5]='\n';
for (j=0;j<=kimenet+5;j++)
{
fputc(e[j],fk);
}
}else {
strcpy(e,"NEM");
for (j=0;j<3;j++)
{
fputc(e[j],fk);
}
e[3]='\n';
fputc(e[3],fk);
}
fclose(f);
fclose(fk);
return 0;
}
köszi előre is
WonderCSabo
félisten
Válaszoltam a C++ topikban, de itt folytassuk.
vanek
tag
igen tudom.. és nagyon szépen köszönöm! de amint írtam, nekem nem a programommal van a gond..hanem az eshetőségekkel..
[ Szerkesztve ]
WonderCSabo
félisten
Kijavítottam a programodat, most elvileg mindenre működnie kell... Találtál olyan esetet, amire így sem működik?
vanek
tag
ha arra a javításra gondolsz, amit a c++ topikban írtál..akkor nem működik jól, mivel már az első próbálkozásnál találtam egy hibát..
a forrás sztring az ALMa volt a cél sztring az ALMA
és azt írta, hogy igen benne van és kiírta az ALMa-t..
WonderCSabo
félisten
Nem figyelted meg eléggé a javítást. Ha nincs benne, akkor a string hosszát adja vissza, ennek oka van, ha érdekel leírom.
Tehát a mainben ezt kell vizsgálnod: if (kimenet!=strlen(s)) IGEN else NEM.
[ Szerkesztve ]
vanek
tag
persze, hogy érdekel, így tanul az ember!
WonderCSabo
félisten
Amennyire én tudom, ilyenkor az aktuális pozíciót adja vissza, ilyenkor a for ciklusban már pont az utolsó karakter+1 indexig ment. Tehát igazából a végén is elég i-t visszaadni, nem kell meghívni az strlen fv-t.
[ Szerkesztve ]
vanek
tag
feltöltöttem a progit kijavítva..ugyan úgy 5 hibás eredmény volt..és ugyan ott voltak a hibás eredmények..:\
WonderCSabo
félisten
De milyen bemenettel?
vanek
tag
bemenet nincs..
a kész progit feltöltöm egy oldalra, ahol egy tesztelő program 10 tesztet futtat le..
az eredményeknél, csak annyit látok, hogy pl.: 5 teszt, futási idő 004 sec, hibás eredmény..
de sajnos semmi ötletem sincs, hogy mi lehet az..
[ Szerkesztve ]
WonderCSabo
félisten
De van bemenet, csak Neked nem mondja meg mi volt az, sajnos. Egyébként mi a pontos specifikáció? Mert ha mondjuk ha nincs benne és -1-et vár, akkor nyilván rossz. Egyébként sztem jó a program.
vanek
tag
itt a példa
igen bemenet van csak én nem tudom..
azért gondolom, hogy valami szélsőséges megoldás..
egyébként nem futtattam a programot minden eshetőségre ami eszembe jutott..mindenre jó volt..:\
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!