Hirdetés

2024. április 25., csütörtök

Gyorskeresés

Hozzászólások

(#251) JoJ


JoJ
csendes tag

Na ide is leírom, hátha többen olvassák: (boccs a noob kérdésekért...)
strcpy függvény

strcpy (s, t)
char *s, *t;
{
while (*s++ = *t++)
;
}

Mi az s és a t?
Mi a *s, *t?
Mi a *s++ és a *t++, és mit csinál?
Hogyan "tudja" a while, hogy mikor van vége a szövegnek?
(az nem kielégítő válasz, hogy megkeresi a 0-át a string végén!)

[ Szerkesztve ]

(#252) Jester01 válasza #25954560 (#250) üzenetére


Jester01
veterán

1. Igen, alapvetően jobb az operációs rendszerre hagyni a magok kezelését, de bele lehet szólni.
2. Ha nem tudsz dinamikusan szétosztani tetszőleges szálra, akkor írd meg 8ra, igen.
3. Nem értem mit akarsz a memóriaterülteteken optimalizálni. Lehet, hogy csak nem ismerem ezt a technikát. :F

Jester

(#253) doc válasza JoJ (#251) üzenetére


doc
nagyúr

akkor a másik totyikba már nem válaszolok :)
szóval:

s az a cím (ha úgy tetszik, string) ahova a t címen tárold string bemásolódik
char *s annyit jelent, hogy az s változó egy karakterre mutató mutató lesz
*s++ ez annyit művel, hogy megadja azt az értéket, amire az s változó mutat, majd az s értékét növeli, így az a következő karakterre fog mutatni
a while onnan tudja hogy vége a szövegnek, hogy a t változó, ami minden ciklusban a következő karakterre mutat, 0-ra fog mutatni, ami meg ugye string vége
így az s által mutatott helyre 0 kerül, ezt a visszatérési értéket a while is látja, és mivel 0, amit ő "hamis"-ként értelmez, végez

remélem vmennyire érthető volt...

(#254) Jester01 válasza JoJ (#251) üzenetére


Jester01
veterán

- s és t a cél illetve a forrás paraméter
- *s és *t az aktuális karakter
- a *s++/*t++ eltárolja/visszaadja az aktuális karaktert majd növeli a pointert, hogy a következő kartakterre mutasson
- pedig a while bizony onnan tudja, hogy vége a szövegnek, hogy összetalálkozik a lezáró 0-val. Máshonnan nem is tudhatja :F

Jester

(#255) #25954560 válasza Jester01 (#252) üzenetére


#25954560
törölt tag

koszi.
nem a memoriateruleteken akarok optimalizalni, csak rosszul fogalmaztam. a hozzaferesekkel van bajom. valami szemafort muszaj lesz hasznalni, ehhez viszont kell szinkronizacio a szalak kozott. ha tobb szal matathat egyszerre ugyanabban a tablaban, akkor abbol baj lehet.
tovabb bonyolitja a dolgot, hogy mi van a virtualis gepben futo cuccossal? akkor bizony maga a virtual machine kell hasznaljon tobb magot, mert belul en nem kell tudjam mi van alatta. ajjajjaaaaajjj :D

(#256) JoJ


JoJ
csendes tag

Nagyon-nagyon szépen köszönöm! :R :R

(#257) JoJ


JoJ
csendes tag

Még annyit kérdeznék (ha jól emlékszem azt is kérdezte), hogy az s és a t milyen állomány?
Gondolom szöveges...

[ Szerkesztve ]

(#258) JoJ


JoJ
csendes tag

Na végre megvan! :))

megjegyzés.: a while olvassa a stringet és közben vizsgálja, hogy 0 e, így ha a string végére ér (ami 0), akkor kilép a ciklusból

(#259) PazsitZ válasza JoJ (#257) üzenetére


PazsitZ
addikt

Itt nincs szó állományról azok char tömbök/stringek
Azért egy C alapkönyvet át kellene olvasnod, mielőtt programozni akarsz... :U

[ Szerkesztve ]

- http://pazsitz.hu -

(#260) supesz


supesz
aktív tag

Hello,

Tud vki ajánlani vmi windowsos c compilert?
Az 1hsz-be volt ez a devc++ vagy mi. Az fordítja a sima c nyelvet is? Igazából vmi windows alatt futó cucc kellene, mert az a régi kék képernyő nem olyan szimpi.
Tud vki valamit esetleg ajánlani?

A nucleus arcuatus (infundibularis) kapillárisaiból összeszedődő vénák a hypophysisnyélen keresztül lejutnak a hypopisis elülső lebenyébe - az adeno-hypopisisbe, és ott újra kapillárisokká oszlanak.

(#261) Lortech válasza supesz (#260) üzenetére


Lortech
addikt

Igen, van sima c projekt template-je is. Legegyszerűbb a devcpp.

Thank you to god for making me an atheist

(#262) supesz válasza Lortech (#261) üzenetére


supesz
aktív tag

Most töltöm. :)
Megnézem milyen. Előtte leszedtem a MiracleC Compilert, de nem tudom mi nem jó neki. A könyvből másolom be neki a példát, de nem fordítja le. Ráadásul nem engedi beírni a könyvtári fügyvény hívására vonatkozó sort sem. Mi lehet vele?! Nem tudom.
Remélem ez a Dev jobban muzsikál majd :)

A nucleus arcuatus (infundibularis) kapillárisaiból összeszedődő vénák a hypophysisnyélen keresztül lejutnak a hypopisis elülső lebenyébe - az adeno-hypopisisbe, és ott újra kapillárisokká oszlanak.

(#263) supesz


supesz
aktív tag

:R Nagyon jó.

A nucleus arcuatus (infundibularis) kapillárisaiból összeszedődő vénák a hypophysisnyélen keresztül lejutnak a hypopisis elülső lebenyébe - az adeno-hypopisisbe, és ott újra kapillárisokká oszlanak.

(#264) plaschil


plaschil
aktív tag

Sziasztok!
Erre a kérdésre tudja valaki a választ?
Írjon makrófüggvényt, ami két síkbeli pont távolságát számítja ki.
Ugye a két pont távolságát úgy számoljuk ki, hogy adott az x1, x2, és y1, y2. Ha x2-ből kivonom az x1-et, megkapom a derékszögű háromszög egyik oldalát, amely ugye az x tengellyel párhuzamos. Ugyanígy y2-ből y1-et ha elveszem, megkapom a derékszögű háromszög másik oldalát, ami meg ugye az y tengellyel párhuzamos. Ha összekötöm a két pontot, akkor megkapom a derékszögű háromszög átfogóját. na már most ha ismerek két oldalt, és a háromszög derékszögű, akkor alkalmazhatom a Pitagorasz-tételt.
Na ezt kéne valahogy felírni egy makrófüggvénnyel.
Én valami ilyesmit írtam vizsgán:

#define C = sqrt(a*a+b*b, 1/2);

Creative G500 vezérlő panelt keresek// Hol vagy helyileg? - A kisszobába. // Szilvásbuktát, mert azt szeretem!

(#265) doc válasza plaschil (#264) üzenetére


doc
nagyúr

inkabb:

#define TAVOLSAG(x1,y1,x2,y2) sqrt(((x1)-(x2))*((x1)-(x2))+((y1)-(y2))*((y1)-(y2)))

fejbol irtam, szoval nem biztos hogy jo

a sok zarojel (minden parameter kore) azért kell, hogy na nem egyetlen szammal, hanem vmilyen kifejezessel hivod meg, ne kavarodjon ossze, mivel ez csak sima szoveghelyettesites

[ Szerkesztve ]

(#266) odonye


odonye
csendes tag

Sajnos egy nagyon hülye kérdésem lenne. Mivel mostnában egy jóideig nem programozgattam, és előtte is írtózatossan kezdő voltam, msot felmerült egy problémám. Függvények, amik(ha jól emlékszem) előtte működtek, most nem.
PL:
int main()
{
int a
printf("%d",valami(a));
}
valami(b);
int valami(b);
{
int c;
c=5;
return (c);
}

(#267) doc válasza odonye (#266) üzenetére


doc
nagyúr

ezek előtte sem működtek ;)

int main()
{
int a
printf("%d",valami(a));
}

ez eddig OK, csak az "int a" végére kell egy pontosvessző

valami(b);
ez viszont a levegőben lóg, a main-en kívül van, így nem jó

int valami(b);
{
int c;
c=5;
return (c);
}

ez meg majdnem jó (ha azt akarod hogy 5-öt adjon vissza), csak a fejléc nem, helyesen:
int valami(int b)
{
...

(#268) odonye


odonye
csendes tag

Köszönöm, pontos vessző, pedig csak gépelési hiba.

(#269) CrusherW válasza plaschil (#264) üzenetére


CrusherW
tag

Hello.

Unalom űzésként találtam ezt a topicot, ide legalább tudok írogatni :)

Előszöris, sajna csak C# ban tudom elmondani az én megoldásomat, de remélem az is segít:

először is, az oké, hogy kivonod X2 - X1 et, és Y1 ből Y2 őt, de ugye, arra is gondolj, hogy a két pont közül nem tudod, melyik hol, van, tehát először megkell állapítani, hogy melyik a nagyobb, és nagyobból a kisebbet számold ki.

public double GetDistance(PointF p1, PointF p2)
{
double xDistance = Math.Max(p1.X, p2.X) - Math.Min(p1.X, p2.Y);
double yDistance = Math.Max(p1.Y, p2.Y) - Math.Min(p1.Y, p2.Y);

return Math.Sqrt(Math.Pow(xDistance, 2) + Math.Pow(yDistance, 2));
}

ezt aztán egysorossá is lelehet redukálni, nah meg PointF objektum helyett lehet több double, int, decimal, vagy neked tetsző változót használni. Lehet, hogy nem tökéletes mert notepadba lehet elírtam valamit, de sztem ez jó lesz

(#270) feherpeter


feherpeter
csendes tag

Hello!

main()
{
char ch[3];
ch = "123";
printf ("%s", ch);
}

A 4. sorban azt mondja hogy Lvalue required. De hát ott van nem? Vagy mi a baj vele? :F

(#271) doc válasza feherpeter (#270) üzenetére


doc
nagyúr

a 3 kevés lesz, ha karaktert akarsz beletenni akkor 4 eleműnek kell lennie, mert tárolni kell a stringvégi lezáró 0-t is
a ch="123" helyett meg az strcpy(ch, "123") formát használd, mert így csak a mutatót írod át (ami elvileg működik, de ne szokjunk rá... ;) )

(#272) feherpeter válasza doc (#271) üzenetére


feherpeter
csendes tag

Kösz működik!

(#273) odonye


odonye
csendes tag

Hogyan tudnék gyököt vonni?

(#274) amargo válasza odonye (#273) üzenetére


amargo
addikt

sqrt :)
cmath

most látom, hogy felettem már írták is.

[ Szerkesztve ]

“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”

(#275) Vico87 válasza CrusherW (#269) üzenetére


Vico87
tag

Igazából nem kell megnézni, hogy valamelyik nagyobb-e. Mert ugyanis négyzetre emeled, ami után mindenképp nemnegatív értéket kapsz.
Az újabb C szabványban már van inline függvényekre támogatás. Azzal szerintem a legjobb egy ilyet megoldani.
Valahogy így :

inline tavolsag(int x1, int x2, int y1, int y2) {
return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) );
}

(Bár a Visual Studio 2005 nem eszi meg C esetén az inline függvényt)

[ Szerkesztve ]

(#276) Vico87 válasza Vico87 (#275) üzenetére


Vico87
tag

Hoppá lemaradt a típus, a mod idő meg lejárt.
A pontos függvénydefiníció :

inline double tavolsag(...)

[ Szerkesztve ]

(#277) Retekegér


Retekegér
HARDVERAPRÓD

Az normális, ha Windows környezetben szempillantás alatt lefut a program és be is zárja az ablakot? Még akkor is, ha egy kamuváltozót akarok beolvastatni a program végén. (Dev-C++-t használok)

<< Heimdal >>

(#278) Lortech válasza Retekegér (#277) üzenetére


Lortech
addikt

Normális olyan értelemben, hogy vsz. nem bug. Nem normális olyan értelemben, hogy gondolom nem ezt szeretnéd. Esetleg bennemarad a pufferben valami az előző beolvasásokból, ezért egyből lefut a beolvasás. Ha bemásolod a kódot, akkor egyértelművé tehető. A system("PAUSE"); a program végén nem szép megoldás, és kerülendő is valódi alkalmazásoknál, de tesztelni és tanulgatni megteszi az előbbi figyelembevételével.

[ Szerkesztve ]

Thank you to god for making me an atheist

(#279) Retekegér válasza Lortech (#278) üzenetére


Retekegér
HARDVERAPRÓD

Egyszerű programnál is ez a helyzet, pl.:

#include <stdio.h>

main()
{
int a,b,c;
printf("Kerek ket szamot:");
if (scanf("%d,%d",&a,&b)!=2);
{
printf("Hibas adatbevitel!");
exit(-1);
}
c=a+b;
printf("A ket szam osszege: %d+%d=%d\n",a,b,c);
}

<< Heimdal >>

(#280) Lortech válasza Retekegér (#279) üzenetére


Lortech
addikt

Uff. Szóval if után nem teszünk ;-t, hacsak nem egy üres utasítást akarsz szimbolizálni.
Itt most az történt, hogy az igaz ágadban lett egy üres utasítás (;). Majd jön egy blokk ( {} )ami mindig lefut az előbbi if-től függetlenül, így persze egyből kilép az exit miatt.
Meg az ilyen exit(-1) is felesleges, egy if () {} else {} megoldás szimpibb.

De hozzán legközelebb az áll, hogy ha a két param sikeresen beolvasódott, akkor csinálsz valamit, egyébként meg nem (nincs else ág sem), és végetér a program a main blokk végén.

[ Szerkesztve ]

Thank you to god for making me an atheist

(#281) -kdM-


-kdM-
senior tag

hello!
lenne egy keresem egy feladattal kapcsolatban...tehat egy txt-bol beolvasok x szot/nevet es a programmal meg kell szamoltatni melyik szobol/nevbol mennyi van
(nem kell forraskod minta eleg egy hasznalhato otlet mivel nekem mar sokadik megoldasom vallott kudarcot :/ es termeszetesen a programnak "csak" a szamlalo reszere kene tipp)

(#282) Retekegér válasza Lortech (#280) üzenetére


Retekegér
HARDVERAPRÓD

Pontosvessző véletlenül maradt benne, ráadásul az exit függvényt tartalmazó stdlib.h állományról is megfeledkeztem. Mindegy.
Így már jobb egy kicsit:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>

main()
{
int a,b,c;
do
{
printf("Kerek ket szamot:");
if (scanf("%d,%d",&a,&b)!=2)
{
printf("Hibas adatbevitel!\n");
continue;
}
c=a+b;
printf("A ket szam osszege: %d+%d=%d\n",a,b,c);
}
while (getch()!=32);
}

<< Heimdal >>

(#283) Lortech válasza -kdM- (#281) üzenetére


Lortech
addikt

Például létrehozol egy egyszerű structot két mezővel:
int szam;
char * szo;

Aztán implementálsz egy neked szimpatikus dinamikus adatszerkezetet (pl láncolt lista) melynek elemtípusa az előbbi struct és amelyben tudsz keresni a "szo" mezo szerint. Aztán feldolgozod a szavakat, és ha van már egy adott szó a listában, akkor a megfelelő elem szam mezőjéhez hozzáadsz egyet, ha nincs, akkor befűzöl a lista végére egy új elemet. Nyilván itt keményen memóriát kell kezelni, de ez alap.

Thank you to god for making me an atheist

(#284) -kdM- válasza Lortech (#283) üzenetére


-kdM-
senior tag

kicsit primitivebb uton ugyan, de megoldottam...azert ezt is megerne kiprobalni

koszi

(#285) Pocak89


Pocak89
aktív tag

Azt meg tudná nekem mondani vki hogyan lehet hagyományos c programot lefordítani/lefuttatni microfos visual studio 2005-ben? mert a "play" gomb az szürke és nemtom mit csináljak. Inkább abban írnám nem turbó c-ben. :)

Video games ruined my life!!! Good thing I have two extra lives

(#286) odonye


odonye
csendes tag

Abban ,hogy kell nem tudom, de van más megoldás is: Dev C++.

(#287) Lortech válasza Pocak89 (#285) üzenetére


Lortech
addikt

C/C++ Projektet kéne neki nyitni kezdésnek, hacsak megnyitod a c fájlt, akkor nem fog futni.

Thank you to god for making me an atheist

(#288) feherpeter


feherpeter
csendes tag

Hello!
Az lenne a kérdésem hogy megoldható-e C-ben hogy jpg fájlokat töltök be és megjelenítem őket.

(#289) kicsitomi88 válasza feherpeter (#288) üzenetére


kicsitomi88
őstag

Nem.

90 87.5 87.8 87.5

(#290) feherpeter válasza kicsitomi88 (#289) üzenetére


feherpeter
csendes tag

Keresgéltem google-n. Majdnem ugyanazt írtam be mint te(open jpg with c source). De ott csak jpg encoder/decoder volt meg open-source. Nézd csak meg ha gondolod.
Tehát azt szeretném hogy megmondom a kép elérési utját és valami változóba eltárolom és azt később megtudom jeleníteni. Most má nem muszály jpg tök mindegy csak valaki segítsen :O

(#291) doc válasza feherpeter (#290) üzenetére


doc
nagyúr

millió megoldás van, a gugli igenis a barátod
persze a jpg beolvasása önmagában kevés, azt meg is kell jeleníteni, erre szintén sok lehetőséged van, az egyik legegyszerűbb és legjobb az SDL
keresgélj a neten SDL tutorialokat, ezzel a képbetöltés/megjelenítés mellett millió mást is meg tudsz csinálni

(#292) feherpeter válasza doc (#291) üzenetére


feherpeter
csendes tag

Kösz a választ!

(#293) Vico87 válasza Pocak89 (#285) üzenetére


Vico87
tag

File / New / Project, a megjelenõ ablakban pedig "Project type"-nak Visual C++, aztán "Templates" közül pedig "Win32 console application", töltsd ki a "name" és "solution name" mezõket, majd a varázslóban katt az "Application settings"-re, és pipáld be az "Empty project"-et, végül finish. Ezután a "Solution explorer"-ben (ha nincs kint alapból, akkor a View menübõl elõcsalogatható) jobb klikk a "Source files"-ra, "Add / New Item". Válaszd ki bal oldalt a "Code" kategóriát, majd a C++ file-t, névnek viszont adj *.c kiterjesztést (ezzel automatikusan C fordítót használ a VS, és nem C++ fordítót). Copy-paste-eld be a kódot a fájlba, majd futtasd (gyorsbill: Ctrl+F5, debuggerhez pedig F5).

(#294) D@ni88


D@ni88
addikt

hali, most kezdtünk el a suliban C-t tanulni.
az lenne a kérdésem h itt mit rontottam el.
Gépileg kéne feltöltenie sorba, de nem hagyja magát :(
esetleg, még azt kérdezném, h a karakteres 2d-s tömböt hogy kell létrehozni :) vagy csak egyszerűen double-el?

#include <stdio.h>
void main()
{
double a[5][5];
int i, j, x, y;
char c;
y=0;
for(i=0; i<5; i++)
{ y=x;
for(j=0; j<5; x=y; j++; x++)
{
a[i][j]=x;
}
}
}

[ Szerkesztve ]

(#295) amargo válasza D@ni88 (#294) üzenetére


amargo
addikt

Én azt sem értem, hogy mit szeretnél csinálni?
Ez szépen sorba feltölti 0-24ig a tömböt

double a[5][5];
int x = 0;
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
a[i][j] = x++;
}
}

“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”

(#296) D@ni88 válasza amargo (#295) üzenetére


D@ni88
addikt

és miként lehet pl számból karaktert konvertálnI?

(#297) D@ni88 válasza amargo (#295) üzenetére


D@ni88
addikt

Akkor ez mért nem jó?

#include <stdio.h>
void main()
{

double a[5][5];
int x, i, j = 0;
for(int i = 0; i < 5; i++)
{
for(int j = 0; j < 5; j++)
{
a[i][j] = x++;
}
}


for(i=0; i<5; i++)
{
printf("\n");
for(j=0; j<5; j++)
{
printf("%d", a[i][j]);
}
}



}

[ Szerkesztve ]

(#298) Lortech válasza D@ni88 (#297) üzenetére


Lortech
addikt

1, int x, i, j = 0;

Ez nem azt jelenti, hogy x = 0 i = 0, j= 0, hanem x és y = meghatározatlan és j =0.

2, amiért nem fordul a programod az az, hogy i és j a cikluson kívül is deklarálva van, meg a ciklus fejében is.

3, minek ide a double? Ha %d-vel akarsz kiiratni, akkor pl int-ként deklaráld illetve fordítva, ha double-t akarsz kiiratni akkor "%f" a szimbólum.

Thank you to god for making me an atheist

(#299) D@ni88 válasza Lortech (#298) üzenetére


D@ni88
addikt

double az itt nem a tizedes jegyet jelöli, hanem azt hogy tömb!
de végülis féligmeddig jó megoldás, csak nem kellenek oda a .00000 azt kéne eltüntetni :D
és esetleg valaki nem tudja h mivel lehet számot konvertálni karakterré?

[ Szerkesztve ]

(#300) Lortech válasza D@ni88 (#299) üzenetére


Lortech
addikt

Óh, igen? :D :Y Mindig tanul az ember! :C

Thank you to god for making me an atheist

Copyright © 2000-2024 PROHARDVER Informatikai Kft.