- Kötelező frissítésnek számít a Microsoft legújabb csomagja a Windows 11-hez
- Házimozi belépő szinten
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Kormányok / autós szimulátorok topikja
- ThinkPad (NEM IdeaPad)
- TCL LCD és LED TV-k
- Fejhallgató erősítő és DAC topik
- 5.1, 7.1 és gamer fejhallgatók
- Kezdő fotósok digitális fényképei
- Milyen TV-t vegyek?
Új hozzászólás Aktív témák
-
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".
-
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,
-
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.....

-
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

-
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

-
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. -
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
-
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? -
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.
-
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
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!
- Kötelező frissítésnek számít a Microsoft legújabb csomagja a Windows 11-hez
- Fejhallgatós találkozó
- Házimozi belépő szinten
- Motorola Edge 70 - többért kevesebbet
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- sziku69: Fűzzük össze a szavakat :)
- Építő/felújító topik
- Kormányok / autós szimulátorok topikja
- Mibe tegyem a megtakarításaimat?
- D1Rect: Nagy "hülyétkapokazapróktól" topik
- További aktív témák...
- PlayStation Okosító Blu-ray lemezek - PS4 GoldHEN Loader / BD-JB Lapse és PS5 Auto Jailbreak AIO
- HP EliteBook 830 G5, G6 13,3" i5, 16GB RAM, SSD, jó akku, számla, 6 hó gar
- Samsung Galaxy S24 Ultra 512GB,Újszerű,Dobozaval,12 hónap garanciával
- Telefon felváráslás!! iPhone 15/iPhone 15 Plus/iPhone 15 Pro/iPhone 15 Pro Max
- LG 55B5 - 55" OLED - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - PS5 és Xbox Ready
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest





még nem használtam a gyakorlatban




