Új hozzászólás Aktív témák
-
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.
Jester
-
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);
} -
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.
“All nothings are not equal.”
-
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
i7 13700k - 32Gb DDR5 - RTX4070S
-
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
#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 lennei7 13700k - 32Gb DDR5 - RTX4070S
-
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
válasz lockdown90 #4110 üzenetére
nah sikerult, mukodik indexelesbe is elrontottam vmit, de mar jo
i7 13700k - 32Gb DDR5 - RTX4070S
-
Jester01
veterán
-
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.Jester
-
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).Jester
-
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 ]
-
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.
-
krisztianAMG
senior tag
Miért omlik ez össze?
char string[100];
scanf_s("%s",string); -
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! -
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!
Gondolkodj globálisan és tegyél lokálisan!
-
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.
Jester
-
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 ]
i7 13700k - 32Gb DDR5 - RTX4070S
-
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 ]
-
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 ]
What is your ikigai?
-
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!
Jester
-
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 ]
What is your ikigai?
-
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
-
Jim Tonic
nagyúr
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?Alcohol & calculus don't mix. Never drink & derive.
-
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 ]
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
-
MODERÁTOR
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 ]
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
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 gond ha nem vágod a párologtatók bináris nyelvét..."
-
MODERÁTOR
válasz bucsupeti #4143 üzenetére
Egy problémára több megoldás is létezik persze. Számomra - ez egyszerűbb, semmi mágia csak aritmetika! és mind két adattagra ugyan úgy érvényes, nem kell külön algoritmus.
mobal,
"Ott szimatol a sarkadban vasfogait csattogtatva, minden egyes hétköznapod: kirúzsozott medvecsapda."
-
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
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
"Nem gond ha nem vágod a párologtatók bináris nyelvét..."
Ú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!
- Samsung Galaxy A54 - türelemjáték
- Vezetékes FEJhallgatók
- Politika
- Kerékpárosok, bringások ide!
- sziku69: Fűzzük össze a szavakat :)
- A fociról könnyedén, egy baráti társaságban
- Milyen TV-t vegyek?
- Milyen billentyűzetet vegyek?
- Samsung Galaxy A55 - új év, régi stratégia
- Xbox Series X|S
- További aktív témák...