Hirdetés
- Hobby elektronika
- NVIDIA GeForce RTX 5080 / 5090 (GB203 / 202)
- Elkezdte felszámolni a GPU-s PhysX támogatását az NVIDIA
- NVIDIA GeForce RTX 4060 / 4070 S/Ti/TiS (AD104/103)
- 3D nyomtatás
- Titán TUF módra: teszten az NVIDIA GeForce RTX 5070 Ti!
- Intel Core i3 / i5 / i7 / i9 10xxx "Comet Lake" és i3 / i5 / i7 / i9 11xxx "Rocket Lake" (LGA1200)
- Milyen házat vegyek?
- Gaming notebook topik
- HiFi műszaki szemmel - sztereó hangrendszerek
Új hozzászólás Aktív témák
-
Karma
félisten
válasz
buherton #4197 üzenetére
Már hogyne volna C stílusú ez a fajta zárójelezés.
Amellett, hogy Ritchie eléggé a nyelv alkotója, nagy open source projektekben is előfordul, hogy ez a forma mellett döntenek.
De persze az is gyakori, hogy új sorba rakják. C-ben én is úgy szoktam, de ettől nem lesz univerzális igazság.
-
Jester01
veterán
válasz
stranger28 #4198 üzenetére
Szerintem alapvetően nincs baj az int*-al, bár tény, hogy C-ben ilyen nincs de szerintem olvashatóbb. Személy szerint szigorúan követem a soronként csak 1 változó elvet, így a "hová tartozik a *" probléma nem érint.
Ja és még a beolvasásod nem bolondbiztos. Igaz, azt C-ben nehéz is csinálni, de első körben legalább a scanf visszatérési értékét ajánlott ellenőrizni.
[ Szerkesztve ]
-
válasz
stranger28 #4193 üzenetére
Kiegészítés (#4195) dabadab hsz-re.
1. feleslegesek a typecast-ok és a jövőben kerüld ezeket, mert könnyen kerülhetsz olyan helyzetbe, amikor jön a fej vakarás, mert nem fut a kód, mint például:
void foo(long *bar)
{
*bar = 23424234;
}
int main(void)
{
char bar;
foo(&bar);
return 0;
}2. formázás: ez az adott sor végére rakni a { nem C-szerű formázás, hanem tán a Java-ból jön, és ajánlott ott használni. Továbbá próbáld kialakítani a saját stílusod, és tartsd magad ahhoz, mert könnyebb neked és másnak is olvasni a kódod.
int* foo; helyett int *foo; mert ebből is lehetnek gondok, mint int* foo, bar; és két pointer helyett lesz egy pointer és egy változó, és nincs olyan típus, hogy int pointer, hanem int-re mutató pointer van csak.
3. óvatosan az ilyenekkel:
for(i=0;i<n;i++)
if (palyak[i]==0)
{
nemsi_index[a]=i;
a++;
}Ugyanis nem feltétlenül portable a kód. Sajnos nem mindegyik fogadja el így ezt a formát. Az ilyen formával már kevésbé lehet gond:
for(...)
{
if(...)
...;
...;
}[ Szerkesztve ]
-
dabadab
titán
válasz
stranger28 #4193 üzenetére
Par dolog:
0. Az egesz cuccban egy darab komment sincs, pedig azt erdemes gyakorolni, mert kulon tudomany.
1. "magic value"-ket a kodba irni nem tul jo gyakorlat, jobb konstanskent kezelni oket, illetve C-ben makrokent, szoval "#define MIN100_NOT_FOUND -1"
2. A free()-ket erdemes pont forditott sorrendben meghivni, mint a malloc()-ot, egyreszt, mert ugy maradnak meg szepen a blokkok, masreszt meg lehet, hogy egy kesobb malloc()-olt strukturaban egy pointer egy elozoleg lefoglalt memoriateruletre mutat - es ha az elso free()-zed, a masodikrol meg azt gondolod, hogy az meg ervenyes adatokat tartalmaz, abbol baj lesz.
3. A valtozoneveket (konstansokat, makrokat, file-okat, kommenteket) angolul tessek irni.
4. A nemsi_index teljesen felesleges. Lehetne mondani, hogy azert van igy, hogy meglegyen a funkcionalis tagolas (beolvasas, feldolgozas, kiiras), de ez egyebkent sincs meg (amire teljesen elfogadhato magyarazat, hogy igy hatekonyabb a kod - leszamitva ezt a franya nemsi_indexet).
5. Ha megis a tagolas mellett dontenel, akkor erdemes lenne azt harom fuggvenybe kirakni.
-
greenity
senior tag
válasz
stranger28 #4193 üzenetére
Nekem tetszik, nálam elég úri lenne
-
stranger28
addikt
Üdv!
Érdekelne, hogy a kódom mennyire "elegáns" megoldás a következő egyszerű kis feladatra:
Egy hójelentés N sípályán mért hóréteget tartalmazza.
Készíts programot, amely beolvassa a sípályák számát (1≤N≤20) és az egyes pályákon a hóréteg vastagságát (0≤V(i)≤100), majd
A. megadja, hogy melyik sípályán a legnagyobb a hóréteg;
B. megad egy sípályát, ahol a hóréteg legalább 100 cm vastag;
C. megadja azokat a sípályákat, ahol nem lehet síelni (azaz a hóréteg vastagsága 0)!1-20,0-100 és egyéb hülyebiztos vizsgálatokkal most nem töltöttem az időt.
#include <stdio.h>
#include <stdlib.h>
int main(){
int i,n,a=0;
int* palyak;
int maxi=0;
int leg100=-1;
int nemsi=0;
int* nemsi_index;
printf("Palyak szama: ");
scanf("%d",&n);
palyak=(int*)malloc(sizeof(int)*n);
for(i=0;i<n;i++){
printf("%d. palya: ",i+1);
scanf("%d",&palyak[i]);
if (palyak[i]>palyak[maxi]) maxi=i;
if (palyak[i]>=100 && leg100==-1) leg100=i;
if (palyak[i]==0) nemsi++;
}
nemsi_index=(int*)malloc(sizeof(int)*nemsi);
for(i=0;i<n;i++)
if (palyak[i]==0){
nemsi_index[a]=i;
a++;
}
printf("\nLegnagyobb: %d\n",maxi+1);
printf("Van 100 cm ho: %d\n",leg100+1);
printf("Nem lehet sielni %d palyan:",nemsi);
for(i=0;i<nemsi;i++){
printf(" %d",nemsi_index[i]+1);
}
free(palyak);
free(nemsi_index);
return 0;
}Hülyén hangzik, de tényleg erre mennek rá, hogy mennyire úri.
(#4192) aAron_: Én innen szedtem le a keybindert, az minden ilyet megold.
[ Szerkesztve ]
-
aAron_
őstag
válasz
Ereshkigal #4191 üzenetére
az lett végül, ott beraktam valahova majd töröltem, így most jó, remélem mással nem lesz problémám már
köszi a segítségeket
-
Default eclipse beállításnál is ilyen problémák vannak. Állítsd át a billentyűzet kiosztást
.
MOD: Ugye az angol billentyűzeten a speciális karaktereknek más hol van a helyük, így ők nyugodt szívvel tesznek ide billentyű kombinációkat.
[ Szerkesztve ]
-
aAron_
őstag
sziasztok!
az egyik desktopomra (win8x64) most tettem fel először a codeblocks-ot, minden jónak tűnik, kivéve, hogy nem tudok " { " karaktert írni, helyette ezt írja mindig:
/** \brief
*
* \param
* \param
* \return
*
*/mi lehet a baj? alt gr + B gondolom valami shortcut, de alapértelmezetten? kicsit furcsa
-
greenity
senior tag
válasz
dabadab #4186 üzenetére
Ma lnko-t meg faktoriálist meg binomiálist számoltunk.
Úgy kezdtük, hogy statikusan adtuk meg az adatokat, és utána mutattam meg a scanf-et, miután már megcsináltuk a programokat.Az a nagyobb gond, hogy a csapat nagy része még nem látott linuxot, így aztán már ezzel is problémák voltak.
Majdnem minden második embernek én lépegettem be cd-vel a mappájába... másodszorra már ment..
De lehet az elején linux gyorstalpalót kéne tartsak.. -
-
greenity
senior tag
Sziasztok!
Lehet nem itt kéne kérdeznem, de olyan emberkéknek tartok programozást, akik nem tanultak még ilyet.
A tutorom azt mondta, hogy matematikai problémákat oldjunk meg folyamatábrával, majd kódoljuk le c-ben.
Ha esetleg lenne valami ötletetek, hogy mit lehetne nekik adni, annak nagyon örülnék.LNKO-t, faktoriálist, páros és páratlan függvények kiíratását gondoltam eddig, de nem igazán jut olyan eszembe, amit könnyű szívvel adok nekik, akár csak matekból...
-
-
-
Jester01
veterán
Az akkor lehet, ha elfelejtetted hozzálinkelni a math könyvtárat. Minden bizonnyal valamit panaszkodott is a fordító, legközelebb azt is írd meg nekünk, valamint keress rá az interneten is. Jelen esetben valószínűleg undefined reference hibát kaptál ami azt jelenti, a linker nem talált valami hivatkozott szimbólumot. Ilyenkor ha nem elírás történt, akkor hiányzó könyvtárak/modulok felé kell keresgélni. Konstansra azért fordulhat, mert azt szerencsés esetben a fordító kiszámolja így nincs szükség a tényleges atan implementációra.
Végül pedig a gyógymódról. Nem írtad milyen környezetet használsz, parancssoros gcc esetén -lm kapcsolót kell alkalmazni. A -l segítségével lehet függvénykönyvtárakat hozzáadni a beszédes m pedig a matek könyvtár neve. IDE környezetben meg kell keresni hol lehet további könyvtárakat (library) beállítani és ott fel kell venni a matek könyvtárat.
-
zitto
újonc
Egy kis segítséget szeretnék kérni.
Még nemrég kezdtem programozni tanulni ráadásul egyedül.
A problémám az lenne, hogy ezt a kódott nem fordítja le a compiler, csak akkor, ha az atan-on belül szám van és nem egy előre definiált változó. Nem értem miért, kérlek segítsetek:#include <stdio.h> /* printf */
#include <math.h> /* atan */#define PI 3.14159265
int main ()
{
double param, result;
param = 1.0;
result = atan (param) * 180 / PI;
printf ("The arc tangent of %f is %f degrees\n", param, result );
return 0;
} -
eriktoth
tag
Időközbe megoldódott
még hozzáférek a sulishoz
-
eriktoth
tag
Üdv! Valaki esetleg nem tud valami free servereket fejlesztésre? anno volt suliba amin putty-val könnyen el lehetett érni, és fejlesztgetni rajta. Valami hasonlót keresnék
-
Jester01
veterán
Mint rajottem, az ftell/fgetpos csak akkor mukodik "helyesen", ha mar olvastam a streambol.
Ha elso olvasas elott adom ki, akkor -20-at ad vissza, es innentol fogja egyesevel novelni/csokkenteni a poziciot minden getc/ungetc utan, nem nullatol.Ezt nehezen hiszem, és ha tényleg így van az bug.
Nekem egyébként működik linuxon, akár text akár binary módban nyitom meg a fájlt. -
nyunyu
félisten
Bontsuk kette a problemat.
Mint rajottem, az ftell/fgetpos csak akkor mukodik "helyesen", ha mar olvastam a streambol.
Ha elso olvasas elott adom ki, akkor -20-at ad vissza, es innentol fogja egyesevel novelni/csokkenteni a poziciot minden getc/ungetc utan, nem nullatol.
Ez a kisebbik problema.Nagyobbik bajom az, hogy a getc platform fuggoen kezeli a sorvege karaktereket.
Pl. Visual C++ 2010 Win alatt ha \n karaktert lat, akkor lenyeli az utana jovo \r karaktert es mindig kettovel noveli a fajl poziciot.
Ez azert problema, mert a feldolgozando forraskodok egy resze UNIX alatt lett mentve, ott meg nincsen \r az \n utan, de akkor is kettovel noveli a poziciot...Plusz nehezitesnek vannak olyan forraskodok is, amiben nincs \n, hanem \r-rel vannak tordelve.
Probaltam szamolni, hany getc/ungetc-nel jarunk, de az sem ad pontos eredmenyt, mivel nem tudom eldonteni, hogy a latott \n karakternel eggyel vagy kettovel noveljem az indexet.
Windows alatt automatikusan utana rakott \r egyaltalan nem jon at a getc-vel, nem tudom megszamolni. -
nyunyu
félisten
Hogyan lehet _megbizhatoan_ lekerdezni, hanyadik karakternel tartunk az eppen feldolgozott fajlban, majd a lementett poziciora visszaugrani?
ftell neha negativ erteket ad vissza, majd a kovetkezo karakter olvasasa utan az elozo rossz ertek+1-et, aztan fseek(fp, pos, SEEK_SET)-re total mashova ugrik, nem a "megjelolt" karakterhez.
fgetpos paros is ugyanazokat az ertekeket adja vissza, mint az ftell.
Ha manualisan szamolom a karaktereket minden getc/ungetc-nel, akkor sem pont oda ugrik vissza.
Probaltam Win alatt VC++ 2010-zel, meg linux alatt GCC-vel, mindegyik produkalja.
Feldolgozando fajl szoveget tartalmaz, mind win, mind linux stilusu sortores is elofordulhat benne. -
alapz@j
tag
válasz
Jester01 #4166 üzenetére
Huh, nagyon jó ez a GCC Explorer, meg is adta a választ:
int main() {
for (int i = 0; i < 5; ++i) {
int x = i + 10;
}
}g++ 4.8 (-O és más kapcsolók nélkül)
main:
push rbp
mov rbp, rsp
mov DWORD PTR [rbp-8], 0
jmp .L2
.L3:
mov eax, DWORD PTR [rbp-8]
add eax, 10
mov DWORD PTR [rbp-4], eax
add DWORD PTR [rbp-8], 1
.L2:
cmp DWORD PTR [rbp-8], 4
jle .L3
mov eax, 0
pop rbp
retÉrdekes, ha jól olvasom, akkor a teljes stack allokálás (int i és int x is) megtörténik már a ciklus előtt, azaz nincs sem menet közbeni allokálás, sem blokk utáni deallokálás.
-
Jester01
veterán
válasz
alapz@j #4165 üzenetére
Ahogy a kollega írta, logikailag megsemmisül és a szabvány csak ennyit ír elő.
Az már fordítófüggő, hogy ez hogyan néz ki gépi kód szinten, de rendesen optimalizáló fordító nyilván előre lefoglalja a területet és újrahasznosítja. Mellesleg a stack kezelésnek igen minimális az overheadje hiszen csak egy-egy pointer művelet.Ha érdekel a végeredmény hogy néz ki akkor kérj assembly listát a fordítódtól vagy használd ezt a remek weboldalt.
-
alapz@j
tag
Egy C99
for (..) {
int x = ...
}ciklusban az x minden iterációnál létrejön/megsemmisül a stack-en vagy csak egyszer és mindig az kerül felhasználásra?
-
tototos
őstag
Sziasztok!
Mi a különbség a két függvény között? Mi alapján kell használni az externt és mi alapján nem?
extern void do(int,int)
void do (int,int) -
-
tototos
őstag
Sziasztok!
Egy kis preprocesszor segítség kellene.
A következőt szeretném valahogy fordítás előtt megcsinálni.
Adott a következő 2 define#define CHG_I2C I2C1
#define GPIO_AF_I2C1 0x000Ehhez kellene egy macro ami kb így nézne ki.
#define CONCAT(a,b)
ennek azt kellene csinálni hogy
CONCAT(GPIO_AF_,CHG_I2C) meghívása után a GPIO_AF_I2C1 legyenPróbálkoztam sok dologgal de még nem sikerült rájönni melyik a jó kombináció.
-
bucsupeti
senior tag
válasz
Bobrooney #4147 üzenetére
Nem tudom de nekem simán elfogadták a saját megoldásomat. Vagy fgets-el vagy getc-vel csináltam és mindig a helyzetnek megfelelő inputot írtam. Soha nem használtam a Bauer féle getline-t. Igaz hogy ez 16 éve volt már, de akkor is ugyan azt a getline-t használta mint amit most. Neki rohadtul bejöhetett ez a módszer
-
Bobrooney
senior tag
válasz
bucsupeti #4143 üzenetére
Alapvetően a SZE C vizsgának az a lényege (ProgI-ből), az input ellenőrzés.
Karakterláncot kérünk be (gyakorlatilag csak a getline-t fogadják el!)
Majd ellenőrizzük, hogy helyes-e az input, vagy hogy helytelen-e (attól függ, hogy építed fel az ellenőrzést).
Majd ha csakis kizárólag legalább formailag helyes adat érkezett be, akkor mehet a tartalmi ellenőrzés.
Majd ugye az "alapfeladat". -
bucsupeti
senior tag
Az órát átszámolni percekbe, hozzáadni a perc részt. Ezt mindkettőnél megcsinálni.
Az elsőből kivonjuk a másodikat és vesszük az abszolút értékét.
A kapott eredmény / 60 lesz az óra a kapott eredmény % 60 lesz a perc.Ennyi.
C-ben számolás+kiiratás (draft):
kulonbseg=abs((o1*60+p1)-(o2*60+p2))
printf("%d:%d",int(kulonbseg/60),kulonbseg%60Szerintem az ellenőrzött input és annak feldolgozás sokkal "bonyolultabb".
[ Szerkesztve ]
-
Nem lenne egyszerűbb megoldás, ha megvizsgálnád, hogy melyik "óra a nagyobb" azt elvégeznéd simán kivonással, a percnél pedig hasonló képen (itt fordított esetben, tehát, ha az első "óránál" nagyobb a második akkor 24-ből ki kell vonni)? Bár ott én úgy oldanám meg, hogy az viszonyítási alap - tehát a legelső - időpont "perceit" kivonnám 60-ból majd hozzáadnám a másikét (itt értelemszerűen lenne 60-nál nagyobb érték is, akkor simán -60 és megvan a keresett különbség).
Pl.:
1. 00:00
2. 09:17
3. 11:23
Itt tök egyszerű, leellenőrzöd, mindig a nagyobb az időpont.
Pl.:
1. 15:37
2. 16:42
3. 09:27
Itt már kevésbé. Első óra 15, a második 16. Ez oké, nagyobból a kisebb. A második esetben 9 óra viszont kisebb, de itt is nagyobb-kisebb majd ezt az értéket levonod 24-ből (15 óra és 9 között van 18 óra különbség. 15-9=6, 24-6=18). Perc esetén hasonlóan.
Remélem érthető voltam!
mobal,
[ Szerkesztve ]
-
bucsupeti
senior tag
SZE vizsga.
Van egy tanítványom aki szintén tegnap volt vizsgázni. Neki sikerült az alapfeladatot megcsinálnia úgyhogy sikeres vizsgát tett.Tök véletlenül a vizsga előtt egy hétig éppen egy időátszámító feladatot adtam neki (éjféltől eltelt másodpercekkel kellett számolnia moduló képzéssel).
A lényeg hogy úgy csináltattam meg vele az időpontátszámítót hogy készíetett egy ctoi() függvényt amit hivogatott. Kiszámolta másodpercekben az órát a percet és a másodpercet, majd úgy modulózott tovább.Boldogan mesélte hogy sikerült a vizsga, én is örültem neki. Nem is kérdeztem hogy mi volt a vizsgafeladat, ma meg látom itt ezt a sze feladatlapot. Fel is hívtam hogy szégyellje magát, mert az alapfeladat gyakorlatilag készen volt már egy hete és sokkal tovább kellett volna jutnia.....
[ Szerkesztve ]
-
Az alapelv oké, de ez mi? Ha ez megvan, akkor a két időpontot ki kell vonni egymásból, majd az órát meg kell szorozni 60-nal és hozzá kell adni a percet. Ezt már a kivonás előtt meg kell tenned. A visszaalakítást pedig maradékos osztással (modulo) tudnád megcsinálni, de az itt nem kell. AM esetén ellenőrzöd, hogy az óra <= 12, 24órás esetén <= 24, pm esetén az órához 12-t adsz, a perc pedig <=59.
Melyik része nem oké még? -
maathe
senior tag
Ma vizsgáztam progból, ami sajnos nem jött össze. A feladat ez volt.
Többféle módon próbálkoztam, de előbb utóbb mindegyikkel lett valami gondom. Szerintetek hogy kellene megoldani?Szerintem kellene egy formátum ellenőrző függvény, de az órát és a percet mégis külön kellene kezelni a minimum és maximum értékek és a különbség meghatározása miatt. Ha ez megvan, akkor a két időpontot ki kell vonni egymásból, majd az órát meg kell szorozni 60-nal és hozzá kell adni a percet.
Lehet, hogy az egész gondolatmenet rossz, valószínűleg ezért sem lett meg
Előre is köszi, ha valaki segít
-
aAron_
őstag
válasz
Jester01 #4136 üzenetére
értem, akkor leírom pontosabban mit akarok kiszámolni, hátha van valami ötleted (meg kedved segíteni). sajnos most úgy érzem még nem elég a tudásom egy ilyen probléma megoldásához.
szóval az egész dolog lényege az, hogy X db részvény (ált 40<X<50) egy portfólióban való optimális eloszlását megtaláljuk. ez akkor a legjobb ha a sharpe ratio a lehető legnagyobb. ezt az alábbi módon kell kiszámolni:
sharpe_ratio=sqrt(250)*((avg_daily_rets - riskfree_daily_rets)/std_dev)
avg_daily_rets nem más mint a porfólió átlagos napi hozama pl.: 0.0002364 = 0.02364%
riskfree_rets az elérhető legnagyobb kockázatmentes napi hozam (lehet akár 10 éves lejáratú amerikai kötvény, vagy akár banki kamat, bár ez utóbbi kevésbé)
std_dev pedig standard deviation of the portfolio, tehát a szórása a napi hozamoknak (ez a kockázat a gyakorlatban)
(250 a kereskedési napok száma egy évben)
adatok amivel dolgozni kell kb így néznek ki (napi igazított árfolyam, mintha mindegyik 1-től indulna az 1. napon):
első, második, harmadik, negyedik, ..., n-edik részvény
1. 1.00000 1.00000 1.00000 1.00000 ... 1.00000
2. 0.99820 0.99930 1.00090 0.99130 ... 1.00010
3. 1.00150 0.99750 1.00140 1.00300 ... 1.00060
3. 1.00510 0.99970 1.00080 1.00380 ... 1.00070
5. 1.00830 1.00240 1.00160 1.00360 ... 1.00080
6. 1.00910 0.99050 1.00270 1.01440 ... 1.00100
7. 1.00900 0.98940 0.99970 1.01890 ... 1.00110
8. 1.00830 0.99060 0.99930 1.02240 ... 1.00170
.
.
.n-edik 1.29590 1.22330 1.13880 1.40270 ... 1.06800
napeddig úgy számoltam (X<=4 esetén), hogy leteszteltem az összes lehetőséget
egyik lehetőség pl.: első részvényt vettem 0.5x, másodikat 0.3x, harmadikat 0.1x, negyediket 0.1x és így kiszámoltam minden napra a porfólió értékét
ebben az esetben (ha az első 4 részvénnyel számolunk csak) a portfólió árfolyama a 2. nap= 0.5x0.99820+0.3x0.99930+0.1x1.00090+0.1x0.99130=0.99811
ha ez az érték megvan minden napra abból már ki tudom számolni minden egyes nap hozamát és tudok vele dolgozni
csak onnan tudom, hogy sokkal több részvény optimális allokációját is ki lehet számolni, hogy többen is több mint 500 részvénnyel dolgoztak (külföldi fórumon), és olyan algoritmust írtak amely egy évre visszamenőleges adatból kiszámolta az optimális allokációt és sharpe ratio-t, mégpedig sokkal nagyobb pontossággal mint 0.01, elmondásuk szerint egy viszonylag lassú gépen kevesebb mint 20 perc alatt lefutott az egész.
remélem érthető és nem magyaráztam túl semmit sem
[ Szerkesztve ]
-
Jester01
veterán
válasz
Jester01 #4135 üzenetére
Sőt, durvábbat mondok. Ha azokat nézzük ahol az első 19 szám a 0, 0.01, 0.02, 0.03, 0.04, 0.05 bármelyike a huszadik pedig szépen kipótolja az összeget 1-re, akkor az 6^19 lehetőség ami nagyjából 609 billió. Ezt az életben nem fogod mind végignézni, és ez még mindig csak az összes lehetőség töredéke!
-
aAron_
őstag
üdv!
hogy lehetne X db szám összes lehetséges variációját a lehető leggyorsabban előállítani úgy, hogy az egyes számok különbsége 0.01 vagy ennek szorzata (akár 0 vagy 1), és az X db szám összege 1?
pl egy lehetséges variáció (ahol X = 20):
0.1 0.03 0.05 0.02 0.04 0.02 0.05 0.05 0.01 0.05 0.05 0.04 0.05 0.05 0.05 0.05 0.02 0.09 0.2
nekem sajnos csak olyan ötletem van amit még leírni is sokáig tartana (sok for loop), és rendkívül lassú lenne
[ Szerkesztve ]
-
skylaner
senior tag
válasz
lockdown90 #4129 üzenetére
Nem hagyja figyelmen kívül, csak a fordító máshogy dolgozza fel mint ahogy te első ránézésre gondolnád.
2 lépésben értékeli ki a feltételt:1: a < b => 4 < 3 => nem igaz, az érték FALSE => tehát 0
2: ÉRTÉK(a<b) < c => 0<3 => ez már igaz lesz ezért fog végrehajtódni az IF igaz ága, nem pedig az else ág.[ Szerkesztve ]
-
lockdown90
senior tag
sziasztok! azt szeretném kérdezni, hogy itt a relációkat miért hagyja figyelmen kívül?
int a=4, b=3, c=2;
if(a<b<c)printf("%d",a);
else printf("%d",b);folyamatosan 4-et ir ki, holott elvileg 3 at kéne.
köszi
[ Szerkesztve ]
-
Jester01
veterán
válasz
Szittja #4121 üzenetére
Szittja: a kill függvénnyel vagy az azonos nevű közismert segédprogrammal.
krisztianAMG: azért mert a scanf_s csak úgy szereti a string beolvasást ha a hosszt is megadod, pl. így: scanf_s("%s", 99, string); Ezt egyébként az msdn szépen le is írja, tessék máskor ott olvasgatni.
Bobrooney: javaslom nézz utána a scanf-nek és a pointer-tömb ekvivalenciának.
-
Carasc0
őstag
Sziasztok!
Érdemes ezt a nyelvet megtanulni? Mármint az ANSI C-re gondolok. Nem akarok hibás következtetésre jutni más által mondottak befolyásolási hatások miatt. Sokak szerint ma már a C++ és a C# a menő. Én azért gondoltam ezt megtanulni mert én a linux világába költözöm, és gondolom oda pontjó lesz! Meg amúgy is szeretem ezt a nyelvet, főleg mióta tudom, hogy ez a programozási nyelvek angolja.
Előre is köszönöm!
-
Bobrooney
senior tag
válasz
krisztianAMG #4122 üzenetére
scanf_s("%s",string);
hiányzik a & karakter
scanf_s("%s",&string);
Legalábbis a legtöbb scanf-nél meg kell adni! -
krisztianAMG
senior tag
Miért omlik ez össze?
char string[100];
scanf_s("%s",string); -
Szittja
csendes tag
Üdv! Volna egy kis problémám: van egy programom ami a megfelelő signalra (SIGUSR1 és SIGUSR2) növeli és kiírja egy változó értékét. Ez rendben is van. De szükségem lenne egy másik programra, ami az előzőnek a futása közben küldi a megfelelő signalokat. Erre milyen módszerek vannak? Köszönöm előre is. Üdv.
-
skylaner
senior tag
Egyre többször látom itt a forumban, hogy fgv paraméterben így szerepel egy tömb:
int osszegez(int tomb[])
és nem így:
int osszegez(int* tomb)Miért ezt használjátok?
Vagy valamiért hatékonyabb mint a második változat?[ Szerkesztve ]
-
Jester01
veterán
válasz
lockdown90 #4115 üzenetére
Ha csak a kiíráshoz kell, akkor a printf formátumok megfelelő használatával ez megoldható:
printf("%.*s_%d\n",strlen(tomb[i].nev)-2,tomb[i].nev,i+1);
(persze ellenőrizni kellene, hogy a név legalább 2 karakter-e). -
Jester01
veterán
válasz
lockdown90 #4113 üzenetére
Ezt a kérdést nem igazán értem, mit akarsz átírni?
Általánosságban: lekéred a string hosszát és szépen index alapján felülirod kézzel vagy strncpy-vel. -
Jester01
veterán
válasz
lockdown90 #4110 üzenetére
A javított verzió nekem működik.
-
lockdown90
senior tag
válasz
lockdown90 #4110 üzenetére
nah sikerult, mukodik indexelesbe is elrontottam vmit, de mar jo
-
skylaner
senior tag
válasz
lockdown90 #4108 üzenetére
Mert az osszegez fgv-ben csak N-ig mész a ciklussal M helyett.
[ Szerkesztve ]
-
lockdown90
senior tag
#include <stdio.h>
#define N 2
#define M 5
typedef struct szavak{
char nev[10];
int jegy;
int ora[5];
}szavak;
void beker(szavak tomb[])
{
int i;
int j;
for(i=0; i<N; i++)
{
printf("Tanulo neve:");
scanf("%s",tomb[i].nev);
printf("Tanulo jegye:");
scanf("%d",&tomb[i].jegy);
printf("Oralatogatasok szama:\n");
for(j=0; j<M; j++)
{
printf("%d.nap:",j+1);
scanf("%d",&tomb[i].ora[j]);
}
}
}
void vissza(szavak tomb[])
{
int i=0;
int veg = N-1;
printf("Nevek visszafele atirva:\n");
for(i=veg; i>=0; i--)
{
printf("%s_%d\n",tomb[i].nev,i+1);
}
}
int legjobb(szavak tomb[])
{
int i;
int max;
int index=0;
max=tomb[0].jegy;
for(i=0; i<N; i++)
{
if(tomb[i].jegy>max)
{
max=tomb[i].jegy;
index=i;
}
}
return index;
}
int osszegez(int tomb[])
{
int i,j;
int osszeg=0;
for(i=0; i<N; i++)
{
osszeg+=tomb[i];
}
return osszeg;
}
void heti(szavak tomb[])
{
int i;
for(i=0; i<N; i++)
{
printf("Heti oralatogatasok: %d\n\n",osszegez(tomb[i].ora));
}
}
int legtobb(szavak tomb[])
{
int i;
int index=0;
for(i=0; i<N; i++)
{
if((osszegez(tomb[i].ora))>30)
{
index=i;
}
}
return index;
}
int main()
{
szavak tomb[10];
beker(tomb);
vissza(tomb);
heti(tomb);
printf("Legjobb tanulo: %s\n\n",tomb[legjobb(tomb)].nev);
printf("30 tobb oralatogato: %s\n\n",tomb[legtobb(tomb)].nev);
system("pause");
return 0;
}tudna esetleg valaki segiteni hogy miert nem adja vissza a 30 na tobb oralatogato nevet, illetve miert nem adja ossze az oralatogatasok osszeget? mindig rossz eredmenyt ad. ki tudna javitani valaki?
nagyon megkoszonnem, nagyon fontos lenne -
Bobrooney
senior tag
válasz
lockdown90 #4105 üzenetére
Lekéred a hosszát és az után indexeled a kívánságodnak megfelelően.
-
lockdown90
senior tag
sziasztok!
azt hogy lehetne megoldani, hogy egy tombben tartolt nevek vegen az utolso ket karaktert
atirom _0-ra? van ra valami fuggveny a string.h-ban? hogy lehetne leprogramozni?koszi
-
Karma
félisten
válasz
Dementor01 #4103 üzenetére
Az shmget után kéne egy shmat (attach), hogy szerezz egy pointert a memóriaterületre. Ez, meg még sokkal több (pl. szemaforok) elég jól le van írva ezen az oldalon.
-
Dementor01
csendes tag
Sziasztok! Osztott memóriás feladatban kérnék segítséget:
Olyan programokra van szükség, ami létrehoz egy osztott memória szegmenst; az egyik program beleír, és vár néhány másodpercet, bináris szemafor segítségével védi az írást; a másik program pedig kiolvas belőle.Az shm szegmens létrehozása megvan, de a többit nem tudom hogyan..
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define SHMKEY 69906L
int main()
{
int shmid; /* osztott memoria azonosito */
key_t key; /* kulcs az osztott memoriahoz */
int size=512; /* osztott mem szegmens merete byte-ban */
int shmflg; /* flag a jellemzokhoz */
key = SHMKEY;
/* Megnezzuk, van-e mar SHMKEY kulcsu es size meretu szegmens. */
shmflg = 0;
if ((shmid=shmget(key, size, shmflg)) < 0) {
printf("Nincs meg szegmens! Allitsuk elo!\n");
shmflg = 00666 | IPC_CREAT;
if ((shmid=shmget(key, size, shmflg)) < 0) {
perror("Az shmget() system-call sikertelen!\n");
exit(-1);
}
} else printf("Mar van ilyen shm szegmens!\n");
//printf("\nAz shm szegmens azonositoja %d: \n", shmid);
exit(0);
} -
Jester01
veterán
válasz
hoffman_ #4100 üzenetére
A maszkolás az bináris dolog, akkor jó ha bitekkel dolgozol. Jelen esetben az alsó két bitet kell leválasztani erre az & 3 az pont jó is, vizsgálni viszont az 10 kombinációt kell aminek az értéke 2.
A helyiértékes dolog ennek a tízes megfelelője és arra az osztás művelet jó. Ugye az egyesek száma az simán 10-el vett maradék, tehát x % 10. A tízesek száma ugyanez csak még egy tízzel való osztás is van benne: (x / 10) % 10. A százas helyiértéknél már 100-al kell osztani és így tovább.
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!