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
- Retro Retro Kocka Kuckó 2024
- Bemutató Spyra: nagynyomású, akkus, automata vízipuska
- 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
Általános témák
LOGOUT.hu témák
- [Re:] [sziku69:] Szólánc.
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [btz:] Internet fejlesztés országosan!
- [Re:] [ubyegon2:] Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
- [Re:] Lenovo Essential Wireless Combo
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [Parci:] Milyen mosógépet vegyek?
- [Re:] [D1Rect:] Nagy "hülyétkapokazapróktól" topik
- [Re:] [antikomcsi:] Való Világ: A piszkos 12 - VV12 - Való Világ 12
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
shinodas
tag
Bocsi, ha nagyon kezdő kérdés, de, hát kezdő is vagyok
while(j<6 && i<6 )
{
if(tomb[i]==tomb_user[j])
{
printf("Valami... " );
i=0;
j++;
}
else
{
i++;
}
}
Az lenne a célom, hogy nézze meg, a tomb user elemei között, hány olyan elem van, ami megegyezik tom elemeivel. Ha egyezés van, írjon ki valamit. És nem igazán szeretne ez muzsikálni nekem
szerk.: azt hiszem működik már. Megoldva! Most rohanok órára, aztán még kipróbálom alaposabban
[ Szerkesztve ]
Chipi333
csendes tag
Az vele a baj, hogy ha tomb egyik eleme sem egyezik a tomb_user első elemével akkor a többit már meg sem fogja nézni, mert egyszer csak i==6 lesz miközben j==0 és kilép a while-ból.
Szóval ezt két egymásbaágyazott for-al kéne, valahogy így:
while(i<6)
{
while( j<6)
{
if(tomb[i]==tomb_user[j])
printf("valami");
++j;
}
j=0;
++i;
}
shinodas
tag
Én valahogy így csináltam, még próbálgatom, h jól működik e
while(j<6)
{
if(i==5){i=0; j++;}
if(tomb[i]==tomb_user[j])
{printf("E " );
i=0;
j++;
}
else
{
i++;
}
}
Chipi333
csendes tag
Hát ez majdnem jó, de tomb[5]-öt sosem fogod megnézni. Szerintem nem érdemes ilyen random konstrukciókkal próbálkozni, mert jó eséllyel benézel valamit. Egy ilyen jellegű próblémát két egymásba ágyazott iterációval szokás megoldani, mert akkor végig mész mindkét tömbön biztosan
shinodas
tag
Nem egészen tudom, hogy néz ki, amire gondolsz Tudnál mutatni példát?
Korcsii
őstag
dupla
[ Szerkesztve ]
Korcsii
őstag
Gondolom valami ilyesmi:
int db, n, i, j;
db = 0;
n = 6;
for (i=0; i<n-1; ++i) {
for (j=i+1; i<n; ++j) {
if(tomb[i] == tomb_user[j]) {
printf ("E ");
++db;
}
}
}
printf("\nEgyezesek szama: ", db);
Chipi333
csendes tag
Arra ami az előző hsz-emben van: http://itcafe.hu/tema/c_programozas_2/hsz_3152-3152.html
Úgy rémlik C-ben nem szokás for-ozni.
Korcsii
őstag
A for elvileg ugyan az, mint a while, csak máshogy írva, így nem látok kivetnivalót benne.
De azért szépen benéztem a kódot én is (hiába, lehet aludni is kéne néha):
int db, n, i, j;
db = 0;
n = 6;
for (i=0; i<n; ++i) {
for (j=0; i<n; ++j) {
if (tomb[i] == tomb_user[j]) {
printf ("E ");
++db;
}
}
}
printf("\nEgyezesek szama: ", db);
shinodas
tag
Köszönöm a válaszokat, nem soká rálesek
Chipi333
csendes tag
Valóban, csak valamiért az rémlett, hogy standard C-ben nincs for... De hát mégis, sőt újabban már ciklusváltozót is lehet deklarálni benne
NSiS
csendes tag
Hi!
Kellene egy kis segítség: a feladatom az lenne, hogy két db kétdimenziós mátrixot szorozzak össze (balról ?) C-ben és hát fogalmam sincs hogy hogy kellene. Ha valaki tudna segíteni azt megköszönném.
Üdv!
WonderCSabo
félisten
Nem tanultál mátrixalgebrát? Itt van szépen leírva mik a mátrixszorzás szabályai (ami 2x2 * 2x2 esetben még egyszerűbbre degradálódik), ez alapján már elég könnyű megírni az algoritmust. Azt, hogy balról szorzod, így önmagában nem elég megszorítás, kérdés melyik mátrix lesz a baloldalon.
NSiS
csendes tag
De tanultam, csak egy pillanatra megzavart az hogy "balról szorzom", azóta persze rájöttem hogy ez csak annyit tesz, hogyha mondjuk van egy A meg egy B mátrixom azokat úgy írom fel hogy B*A.
Na de a lényeg, h nem a mátrixok miatt nem tudom megoldani, hanem C beli hiányosságok vannak, ebben a félévben tanultam először programozást, ezelőtt szakközépben sem és nemis infó karos vagyok, úgyhogy várhatóan ezután sem lesz (a mintatanterv szerint legalábbis). MPLAB-ot használunk, PIC programozás lenne elvileg.
A feladat pedig: "Készítsen függvényt, amely adott változótípuson végez műveletet, valamint a megfelelő változótípussal tér vissza." Az adatok típusa valós az én esetemben.
Az A mátrixot szoroznám balról a B-vel. Printf-et nem szoktunk írni, van egy watch ablak a programban az jelzi az értékeket ha léptetem soronként.
Az eddig elkészült programom, ami természetesen nem fut le ():
#include <p24fj128ga010.h>
float main(){
float fMatrixA[2][3] = {{1.5,2.5,3.5},{1.2,2.2,3.2}};
float fMatrixB[3][2] = {{4.5,4.2},{5.5,5.2,},{6.5,6.2}};
float fMatrixBA[3][3];
float i, j, k, r1=2, r2=3, c1=3, c2=2;
if (c1 == r2){
for (i=0; i<r1; i++){
for (j=0; j<c2; j++){
fMatrixBA[j]=0;
for (k=0; k<r1;k++)
{
fMatrixBA(i)[j] += fMatrixA(i)[k]*fMatrixB[k][j];
}
}
}
}
return 0;
}
És itt megállt a tudomány részemről... pl. azt írja hogy hogy "return type of 'main' is not 'int'" és ezen kívül van még hiba rendesen. De azt se értem, hogy a return-nak integer-nek kellene lennie minden esetben? Mert a feladatkiírás alapján valós értékűként kellene visszatérnie.
[ Szerkesztve ]
WonderCSabo
félisten
A meg egy B mátrixom azokat úgy írom fel hogy B*A
Akkor, ha B-t kell balról A-val megszorozni, egyébként fordítva. Látom sikerült az első Google találatot lemásolni, és azt is rosszul... Tessék:
#include <stdio.h>
int main()
{
float fMatrixA[2][3] = {{1.5,2.5,3.5},{1.2,2.2,3.2}};
float fMatrixB[3][2] = {{4.5,4.2},{5.5,5.2,},{6.5,6.2}};
float fMatrixBA[2][2];
int i, j, k, r1=2, r2=3, c1=3, c2=2;
for(i=0; i<r1; i++)
{
for(j=0; j<c2; j++)
{
fMatrixBA[i][j]=0;
for(k=0; k<r1; k++)
{
fMatrixBA[i][j]+=fMatrixA[i][k]*fMatrixB[k][j];
}
printf("%f\t",fMatrixBA[i][j]);
}
printf("\n");
}
return 0;
}
Ja és egy 2x3 * 3x2 szorzatából 2x2 -es mátrix lesz...
artiny
őstag
Valaki írt már chat programot C ben,azt tudna segíteni valmiben nekem?
[ Szerkesztve ]
Jester01
veterán
Mi lenne ha inkább konkrét kérdést tennéd fel? Chat program nem valami mágia, hogy csak az ért hozzá aki már írt olyat ...
Jester
artiny
őstag
Ez alapján kéne:
http://ap.urpi.fei.stuba.sk/ap/blok3.php
Eddig jutottam:
http://pastebin.com/QJmqYNXV
azt csinálja:
van az alap port beallitas es azt megvaltoztatom a megadottra,majd beallitja a timeoutot es beker egy karaktert. Viszont a fogadast nem tudom megcsinalni es a karakter bekeres is egy vegtelen ciklus (valami alapjan lekene meg allitanom)
[ Szerkesztve ]
NSiS
csendes tag
Köszönöm, így már működik, ezek szerint a mátrixos rész sem volt számomra egyértelmű.
artiny
őstag
azt monták,hogy kéne két ablaknak lenni....azt hogyan csinálom meg? server clienst
Jester01
veterán
Két programot írsz, amit külön futtatsz. Vagy egy programot két példányban futtatsz.
Jester
artiny
őstag
Hát ez nem tudom,hogyan fogom megoldani....
drogery
tag
Hali,
egy beadandó feladatot kellene készítenem. Ezek közül 1et.
1. Irjon C nyelvu programot, ami:
letrehoz ket gyermekprocesszt
ezek a gyermekprocesszek letrehoznak 3-3 tovabbi gyereket
ezek az unokak varakoznak nehany
masodpercet es szunjenek meg
a szulok varjak meg a gyerekek befejezodeset es csak utana szunjenek meg
2. Irjon C nyelvu programokat, ami
SIGUSR1 signal erkeztekor noveli egy valtozo erteket
SIGUSR2 signal hatasara pedig kiirja a kepernyore az aktualis erteket.
a
masik program pedig: futtataskor signal-t kuld az adott processznek
3. Irjon C nyelvu programokat, ami
letrehoz egy uzenetsort
ebbe az uzenetsorba betesz egy masodpercenkent egy valtozot
ennek a valtozonak a kezdoerteke legyen az
aktualis processz azonositoja
a valtozo mindig beiras utan novekedjen 2-vel
a masik program pedig: kiolvas
4. Irjon C nyelvu programokat, ami
hozzon letre egy osztott memoria szegmenst
a felhasznalotol olvasson be szoveget, es ezt irja be az osztott memoria teruletere es
kuldjon signalt a fogado felnek, hogy kesz az uzenet (SIGUSR1)
(segitsegkeppen a masik program pid-je fixen beleteheto a programba)
a masik program pedig olvass ki az
osztott mem szegmensbol, de csak egy adott signal hatasara (SIGUSR1)
vegul szuntesse meg az shm szegmenst
5. Irjon C nyelvu programot, ami
letrehoz egy csovezeteket (egy file deszkriptor part)
elforkol
a gyermek egy signal hatasara elkuld egy rovid szoveget a
szulonek (a signalig blokkol)
a szulo kiirja a kepernyore
megszunnek a processzek (a szulo megvarja a gyereket)
6. Irjon C nyelvu programokat, ami
letrehoz egy nevesitett csovezeteket (bejegyzes az fs-en)
megnyitja
beleir valamit
kozben egy masik program kiolvassa a
csovezetekbol
ezutan az elso program szinten ir bele valamit
a masik program ujbol kiolvassa
a processzek megszunnek es az elso program eltunteti a nevesitett
csovezeteket
7. Irjon C nyelvu programokat, ami
letrehoz egy osztott memoria szegmenst
az egyik program ir bele es var par masodpercet
binaris szemafor segitsegevel "vedi" az irast
a masik program pedig kiolvas belole
8. Irjon C nyelvu programokat, ami
letrehoz egy filet
az egyik program ir bele es var par masodpercet
binaris szemafor segitsegevel "vedi" az irast
a masik
program pedig kiolvas belole a file elejetol kezdve
A beadás határideje szombat 23.59.
Nyilván megfelelő kompenzálás fejében keresnék valakit, aki "segít az elkészítésében".
Többit privátban.
üdv
bambano
titán
ugye tudod, hogy ez a fajta kérés törvénysértő? azt is büntetik, aki felteszi, meg azt is, aki segít.
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
Emoci
csendes tag
Hello!
Lenne 1 kis problemam kene 1 programot irjak ami kiszamolja 1 max 500 cm sugaru kor teruletet es keruletet a kovetkezo feltetelek alapjan:
-hasznalj fajlt
-hasznalj sajat fuggvenyt
Probalkoztam de sajnos folyton hibauzenetet ir ki:
using namespace std;
float p=3.14;
void f(float x)
{
float a,u;
a=p*x*x;
u=2*p*x;
}
void ir ()
{
float x;
FILE*f;
f=fopen("eredmeny.txt","w");
fprintf(f,"%f ",f(x));
fclose(f);
}
int main()
{
float x;
char cont= 'i';
do{
printf ("\n sugar: ");
scanf ("%f",&x);
if (x>500) printf ("hiba");
else
{
f(x);
ir ();
}
printf("\n flytatod ? valaszolj I vagy N: ");
cont=getche();
}while ((cont=='I')||(cont=='i'));
printf("\n\nnyoj meg barmit a befejezeshez");
getch();
return 0;
}
Esetleg tudna valaki segiteni hogy mi a problema?Elore is koszi.
WonderCSabo
félisten
#include <stdio.h>
/* C - ben nincs namespace,
includeolni viszont itt is kell... */
const float p = 3.14;
void f(const float x, float* const u, float* const a)
{
/*
az itt deklarát lokális változókat
nem látja az ir fv, ezárt át kell adni módosításra is
*/
*u = p * x * x;
*a = 2 * p * x;
}
void ir (const float u, const float a) /* át kell adni ezeket - et, a main-beli
lokális a, u az ir - bõl nem látszik */
{
FILE* file; /* ha ez is f-nek hívod, bekavar az u.a.
nevû fv - el... */
file = fopen("eredmeny.txt","w");
fprintf(file, "terulet: %f cm2 kerulet: %f cm", u, a);
fclose(file);
}
int main()
{
float x, a, u;
char cont = 'i';
char c;
do
{
printf ("\n sugar: ");
scanf ("%f", &x);
scanf("%c", &c); /* különben a getchar a bufferben lévő
\n - t olvassa be, és emiatt terminál a ciklus*/
if (x < 1 || x > 500) printf ("hiba"); /* a feltételed szerint 1 - nél se lehet kisebb */
else
{
f(x, &u, &a);
ir (u, a);
}
printf("\n flytatod ? valaszolj I vagy N: ");
cont = getchar(); /* a fv. neve getchar... */
}
while ((cont == 'I') || (cont == 'i'));
printf("\n\nnyoj meg barmit a befejezeshez");
getchar();
return 0;
}
[ Szerkesztve ]
Emoci
csendes tag
Ertem mar koszonom nagyon szepen
WonderCSabo
félisten
Ha nem értesz vmit, kérdezz, abból tanulsz, nem a készen leírt kódból.
Emoci
csendes tag
Igen ez igy van csak en mindezt tanultam mar de par eve nem hasznaltam egyaltalan ez ahogy eszreveszem eleg sokat felejtettem
Sziasztok!
Rég foglalkoztam a cével, bevallom nem emlékszem a mutatókra. Itt a láncolt lista fej elemét, és farok eleme miért nem módosul? Lényegében lenne két tömb a és b és annak a tartalmát szeretném összefűzni egy láncolt listába.
A kód: [link]
mobal,
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
Így is próbáltam: [link]
Ezt kapom vissza:
mobal@endeavour:~/C$ gcc -lm ll_merge.c -o ll_merge
ll_merge.c: In function ‘lcopy’:
ll_merge.c:91:9: error: request for member ‘next’ in something not a structure or union
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
Korcsii
őstag
Én is rég C-ztem mélyebben, de -> mellé biztos kell az a * ?
Gyuri16
senior tag
jo iranyba indultal. 91. sor:
(*tail)->next = l;
azon kivul ez se jo (84):
if(head == NULL)
a head nem lesz NULL, *head kell helyette
Nem vagyok egoista, csak uborkagyalu!
És működik! Akkor jól emlékeztem valamennyire! Kösz!
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
Drizzt
nagyúr
Olyan toolt tudnátok javasolni, ami egy c függvény megadásakor megmondja az összes függvényt, amit onnan meghívhat a program futása során? Ez alatt azt értem, hogy:
1. mindenképpen meg van hívva a függvény, explicit módon.
2. A függvény meg van hívva valamilyen elágazásban, if-ben, switchben, ...
3. Vagy a függvény a fenti függvények valamelyikében meg van hívva, s ez így rekurzívan tovább.
Gondolom erre a static analyserek a jók. Mit ismertek, mi a jó?
I am having fun staying poor.
Snoopenz
csendes tag
Sziasztok!
Tud valaki segíteni abban, hogy fordításnál Dev-C miért írja ki a fork()-ra, getpid()-re stb., hogy undefined reference? Csak UNIX környezetben lehetne futtatni? Vagy valamilyen könyvtár hiányzik?
Egy teljesen egyszerű példával élve:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int procid;
procid = fork ();
}
előre is köszi!
WonderCSabo
félisten
Amennyire én tudom, csak UNIX-on, és ott is includeolni kell a unistd.h -t.
Karma
félisten
Konkrétan POSIX környezet kéne hozzá, így ha a Windows fontos, akkor vagy Cygwin alá kéne vinni a "fejlesztést", vagy ilyesmivel is lehet kísérletezni.
Én csak az előbbit tapasztaltam ki eddig munka közben.
“All nothings are not equal.”
_JD
csendes tag
Sziasztok!
A Juhász István, Kósa Márk, Pánovics János: C példatár könyvet keresem megvételre.
Ha valakinek van eladó, írjon. Előre is köszönöm!
artiny
őstag
eddig jutottam a programban:
[link]
char Data[100];
scanf("%s",&Data);
int bite=strlen(Data);
while(1){
WriteFile(
hCom, // Handle portu, ktory ste otvorili CreateFile
&Data, // Smernik (pointer) na data, ktore chcem vysielat
bite, // Pocet bytov, ktore chcem vyslat
&Pocet, // Smernik (pointer) na pocet vyslanych dat
NULL); // Musi byt NULL
if( Pocet != bite ) // Ak pocet prenesenych dat nesuhlasi
printf("\n Chyba: Zapis na port sa nepodaril.\n");
// a zasa nasleduje CloseHandle(hCom); a potom exit...
else
printf("\n OK.");
printf("ja: %s", Data);
//--------------------Readfile-----------------------------------------
DWORD Pocet1=0; // Poc(et prijatých dát
//unsigned char Data; // Sem ulož prijatý znak
PurgeComm(hCom,PURGE_TXCLEAR | PURGE_RXCLEAR);
ReadFile(
hCom, // Handle portu, z ktorého c(ítame
&Data, // Pointer na buffer, kam ukladáme prijaté dáta
1, // Poc(et bytov, na ktoré c(akáme
// &d, // Pointer na skutoc(ný poc(et prijatých dát
&Pocet1, // Pointer na skutoc(ný poc(et prijatých dát
NULL); // Musí byt( NULL
// Funkcia ReadFile tu teraz c(aká, až kým niec(o
// nepríde, ale mőže aj skonc(it( bez zachyteného znaku,
// ak medzitým vypršia timeouty.
if( Pocet1 != 1 ) // Ak poc(et prenesených dát nesúhlasí
printf("\n Chyba: Citanie z portu nedalo nic.\n");
else
printf("\n OK, z portu sme uspesne prijali [%c].\n",Data);
ezt a két részt,hogyan lehetne összefűzni CreateThread -l?
ArchElf
addikt
Úgy nézem elég csehül állsz
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
artiny
őstag
Igen szlovák kommentek...
itt van esetleg aki kiprobalja,egy virtual port
http://www.fabulatech.com/virtual-serial-port-kit-download.html
A baj a progival,hogy nem tudom miért nem fogadja amit küldök.
shinodas
tag
Sziasztok srácok,
egy kis érdekességbe ütköztünk prog vizsgán. Szóval, ha elosztotok két számot
pl float a=50.5; float b=a/10;, akkor az eredmény 5.050000190734... lesz. SZóval így kíváncsiak lennénk, hogy hogyan lehetne pontosabban osztani?
[ Szerkesztve ]
ArchElf
addikt
Használj egész számokat
AE
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
shinodas
tag
De én 50.5-el akarok osztani, meg a tanár is
ArchElf
addikt
Akkor float helyett valami decimális számolást kell alkalmazni (most hirtelen csak c++ megoldást találtam).
AE
[ Szerkesztve ]
Csinálok egy adag popcornt, és leülök fórumozni --- Ízlések és pofonok - kinek miből jutott --- Az igazi beköpőlégy [http://is.gd/cJvlC2]
Jester01
veterán
Vagy double-t, hátha az már elég pontos (az se lesz 5.05 mivel az 5.05 az végtelen "kettedes" tört):
$ cat >test.c
#include <stdio.h>
int main()
{
printf("%.20f\n", 5.05);
return 0;
}
$ gcc test.c
$ ./a.out
5.04999999999999982236
Jester
WonderCSabo
félisten
Jah, csak az a típus .NET könyvtárban érhető el...
shinodas: Használhatsz double -t, akkor közelebb kerül az érték. Sajnos a számítógépes számábrázolásnak vannak ilyen hátulütői, pont ezért lebegőpontos értéknél sosem nézünk egyenlőséget, mindig vmi küszöbértéket vizsgálunk.
Ehh, Jester megint megelőzött...
[ Szerkesztve ]
shinodas
tag
#include <stdio.h>
#include <stdlib.h>
int main()
{
char cel[10];
char S1[6]="iskola";
int i=0;
while(S1[i]!='\0');
{
cel[i]=S1[i];
i++;
}
cel[i++]='\0';
printf("%s\n", cel);
return 0;
}
Ezt hol szúrom el srácok? Azt próbálgatom, hogy van egy üres, és egy másik stringem, amiben van valami. Amiben van a tartalom, azt akarom belemásolni a másik stringbe.
[ Szerkesztve ]
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!