Hirdetés

2024. május 1., szerda

Gyorskeresés

Hozzászólások

(#1851) sghc_toma válasza vamzi (#1848) üzenetére


sghc_toma
senior tag

ez nem hatvanyozas, csak 2^n-re tudod hasznalni.. a << bitenkenti eltolas balra, ami gyakorlatilag 2-vel szorzast jelent.. ezert ha az 1-et eltolod n-nel, n-szer szorzod az 1-et 2-vel, azaz 2^n-t kapsz eredmenykent..

in asm we trust

(#1852) vamzi válasza sghc_toma (#1851) üzenetére


vamzi
őstag

hú, de láma kérdés volt, a shiftelés eszembe se jutott :B
a pow helyett viszont nincs valami más utasítás? nem mintha szükségem lenne rá, csak írtátok, hogy nem túl jó ennyiszer meghívogatni.

(#1853) vamzi


vamzi
őstag

Egyelőre jegelve a korábbi feladat, majd kitudom, hogy más hogyan oldotta meg a tipusokat.
Viszont lenne egy kérdésem:
a for ciklusból ki lehet lépni a vége előtt? Van rá valami parancs? Esetleg olyan, amit a c90-es szabvány is támogat?
Azt akarom megoldani, hogy van egy előre meghatározott halmazom csökkenő sorrendben és egyesével addig vizsgálom őket, míg a végére érek, vagy az első egyezést meg nem találom, onnantól véget kellene vetni a ciklusnak. Ezt én forral szeretném megoldani, bár rekurzívan valószínüleg könnyebb dolgom lenne, de sajnos nem nagyon értem a rekurzív dolgokat, pedig ülök és figyelek órán, könyvet is bogarászom, de valamiért nem akar átjönni a logikája.

(#1854) Karma válasza vamzi (#1853) üzenetére


Karma
félisten

A parancs amit keresel: break.

“All nothings are not equal.”

(#1855) vamzi válasza Karma (#1854) üzenetére


vamzi
őstag

kipróbálom, de az nem csak a switch - case-ben működik? bár felesleges kérdeznem, mert úgy is kipróbálom :)
köszi.

(#1856) Karma válasza vamzi (#1855) üzenetére


Karma
félisten

Nem, ciklusokban (do, while, for) is működik, kilép a blokkból.
De ha már itt tartunk, van continue is, ami eggyel tovább lépteti a ciklust.

“All nothings are not equal.”

(#1857) Sk8erPeter válasza vamzi (#1843) üzenetére


Sk8erPeter
nagyúr

A pow-hoz include-old a math.h-t is! Tehát az alábbi sort még pakold bele:
#include <math.h>

(#1853): a for ciklusból nemcsak break-kel lehet kilépni, hanem úgy is, ha teljesül a feltétel, ami miatt a ciklus megszakad.
Pl.
for(i=0; i<n || valami_mas==vege_feltetel; i++)
/* ... */

Persze nemcsak vagy-olhatod (||) hanem és-elheted (&&) [szép magyar szavakkal élve :D] is egy másik feltétellel.

Sk8erPeter

(#1858) vamzi válasza Sk8erPeter (#1857) üzenetére


vamzi
őstag

Köszönöm, a választ, azóta már be inklúdoltam a math.h-t. Viszont a feltétel megadása új volt, vagy is még nem gondoltam rá, de tetszik. Viszont egyelőre marad a break. :R

(#1859) Sk8erPeter válasza vamzi (#1858) üzenetére


Sk8erPeter
nagyúr

Nincs mit, amúgy így utólag megnézve a példát, inkább valami ilyesmi életszerűbb:
for(i=0; valami_mas!=vege_feltetel && i<n; i++){
/* ... */
}

Ez olyan, mintha azt írnád, hogy
i=0;
while(valami_mas!=vege_feltetel && i<n){
/* ... */
i++;
}

Sk8erPeter

(#1860) vamzi


vamzi
őstag

Na, itt egy újabb hülye kérdés.
Van nekem egy tömböm tele int-tel. Hogyan tudnám átadni a tömb elemeit egyesével 1-1 char-nak? A lényeg, hogy a beolvasott int egy 6 jegyű számsorozat és azt szeretném adatbázisból visszakeresni és számjegyekre visszabontani a switch - case ciklusomnak. A feladat maga csak annyi lenne egyébként, hogy nagyon sok számsorozatot olvasunk be és meg kell számolni, hogy melyik számjegyből mennyi van, plusz egy két apróbb dolog van még benne. Nem azért írtam le, mi a feladat, hogy megoldjátok nekem, csak hogy tudjátok miről van szó. Engem csak a típus konverzió érdekelne, hogy hogyan is csináljak intből chart és vica versa

(#1861) Karma válasza vamzi (#1860) üzenetére


Karma
félisten

A char egy -128-tól 127-ig terjedő egész szám, csak véletlen, hogy a karaktereket is ezzel írja le a paraszt a C nyelvben. Mivel belül nem tizes számrendszerben tárolja a rendszer a számokat, de még csak nem is BCD-ben, Neked kell kézzel kiszámolnod az egyes helyiértékeket. A tizes maradékos osztás csodákra képes ;)

“All nothings are not equal.”

(#1862) vamzi válasza Karma (#1861) üzenetére


vamzi
őstag

igen, az a b tervem, de nem akarom használni :D úgy viszont még lehet esélyem, hogy ha eleve sztringekkel töltöm fel a tömböm. Köszi a választ :R

(#1863) eziskamu válasza vamzi (#1860) üzenetére


eziskamu
addikt

Ha mindig hat számjegyű a szám nincs gond. Példa
az egyik "számsorod" a t= 654321
(a % a maradékos osztás, a lényeg, hogy az osztás maradékával jön vissza, most látom Karma is ezt ajánlotta, de tényleg nem nehéz, csak próbálgasd és jó lesz :) )
1 egyenlő lesz t(i)%10 -el
2 egyenlő lesz (t(i)%100 - t(i)%10)/10
3 egyenlő lesz (t(i)%1000 - t(i)%100 - t(i)%10)/100
és így tovább.
Mivel int-ekről van szó ezért lehet, hogy el is hagyhatjuk a kivonásokat, mert asszem nem kerekít a C osztáskor, csak simán levágja a tizedespont utánni cuccokat

[ Szerkesztve ]

(#1864) vamzi válasza eziskamu (#1863) üzenetére


vamzi
őstag

köszönöm. ez a rutin meg is van már valahol egy korábbi példafeladat miatt. lehet tényleg egyszerűbb lenne így. egyébként végignéztem a teszteseteket és 6 számjegy volt a maximum.

(#1865) Korcsii


Korcsii
őstag

ejj, ezek a fránya char-ok...

short int x,y;
printf("Kezdő koordináta: ");
scanf("(%d,%d)",&x,&y);
printf("%d %d",x,y);

ez működik is, de az x,y max 100 lehet, így jobb lenne a(z unsigned) char... ha csak az elsőt adom meg, akkor azt megjegyzi, kiírja, a második valami random lesz... de ha mind a kettőt megadom, az elsőt elfelejti (0 lesz)... :U

van erre valami egyszerű és szép megoldás, vagy inkább ne sajnáljam azt a plusz 1 (?) byte-ot? :F :R

[ Szerkesztve ]

(#1866) Karma válasza Korcsii (#1865) üzenetére


Karma
félisten

Teljesen felesleges azzal az 1 bájttal szívni, meg nekem úgy tűnik a referenciából, hogy számot charba olvasni nem tudsz. A %hd-vel csak short intbe olvashatsz, de a %c az ténylegesen egy karaktert olvassa be.

“All nothings are not equal.”

(#1867) Stefa0009


Stefa0009
csendes tag

Sziasztok!
Szeretnék írni c-ben amely kiírja két dátum között eltelt
időt a felhasználó által választott mértékben. Az első paramétere egy kapcsoló
(‐ev, ‐honap, ‐nap, ( , p, p, ‐ora, ‐perc, ‐masodperc), második és harmadik paramétere (YYYY‐MM‐DD alakban) dátumok. Hibás dátum esetén hibát írjon ki. Tudna valaki ebben segíteni?
Előre is köszi

(#1868) doc válasza Stefa0009 (#1867) üzenetére


doc
nagyúr

most akkor C kell vagy shell script? :F

(#1869) Stefa0009


Stefa0009
csendes tag

Inkább Shell script de ha valaki tudna cben segíteni az is jó lenne

(#1870) Jester01 válasza Stefa0009 (#1869) üzenetére


Jester01
veterán

c-ben mktime aztán kivonod a time_t értékeket végül pedig visszaalakítod.
shell-ben a date programot hívhatod a time_t konverzióhoz, a visszaalakítás itt is triviális.

[ Szerkesztve ]

Jester

(#1871) AlapVaj


AlapVaj
csendes tag

Olyan problémám lenne, hogy hogyan kell megírni C-ben ezt:
A program két stinget kap szóközzel elválasztva.
Addig még megy is, hogy elkezdek beolvasni szóközig, de azután hogy folytatom a többi karakter tárolásának megkezdését. Net-en sajnos sehol nem találtam rá programot. Olyat ami két külön álló stringet olvas be. Esetleg valakinek nincs hasonló programja?

(#1872) Gyuri16 válasza AlapVaj (#1871) üzenetére


Gyuri16
senior tag

hogyan kapja meg a program a stringeket?

ha parancssori parameter (pl: program.exe alma korte) akkor az argv tombben lesznek a stringek (ez jo, mert a szokozoknel elvalasztja)
erre itt egy pelda:
[link]

ha beolvasni kell stdinrol, akkor a legtisztabb megoldas az, hogy beolvasod az egesz sort (getline, fgets), es aztan egy ciklussal vegigmesz rajta, es szetvagod a beolvasott stringet ketto masikba (itt vigyazni kell, hogy le legyen foglalva a hely, ahova a stringeket masolod)

kicsit "csunyabb" megoldas, hogy miutan beolvastad az egesz sort, ami ugy nez ki, hogy "szo1 szo2\0" akkor az ureshelyet lecsereled \0-ra, es egy *chart beallitasz a szo2 elejere (igy meglesz a ket stringed ket valtozoban, es nem kell masolgatni)

Nem vagyok egoista, csak uborkagyalu!

(#1873) Adamka1999


Adamka1999
csendes tag

Üdv!

Szeretnék kezelni nagyon nagy számokat, long double nem volt elég. Esetleg valami ötlet?

(#1874) Karma válasza Adamka1999 (#1873) üzenetére


Karma
félisten

Tessék kettő is: GMP, OpenSSL BN.

[ Szerkesztve ]

“All nothings are not equal.”

(#1875) Adamka1999 válasza Karma (#1874) üzenetére


Adamka1999
csendes tag

Kösz, megnézem őket.

(#1876) Korcsii


Korcsii
őstag

illik char-ral számlálni? vagy jobb a short int?
pl egy for cikluson belül, ahol az i mondjuk max 100 lehet...

:R

(#1877) Jester01 válasza Korcsii (#1876) üzenetére


Jester01
veterán

Miért is nem int-et használsz? :F
Ugye a legtöbb helyen automatikusan int-té konvertálódik minden. A short int-nek és társainak leginkább csak a helyigény miatt van létjogosultságuk, tipikusan még lassabbak is mint az int.

Jester

(#1878) Korcsii válasza Jester01 (#1877) üzenetére


Korcsii
őstag

most kezdtem áttérni a short int-re, de igazad van, maradok az int-nél inkább...

(#1879) klambi


klambi
addikt

megoldott feladatokat hol találok? :F :R
kellene néhány db...

[ Szerkesztve ]

"Mond szépen angolul: Gyors róka!"

(#1880) vamzi


vamzi
őstag

Sziasztok. Lenne számotokra egy láma kérdésem :D

Szóval ANSI-C-ben hogy tudom letárolni a sztringeket, ha nem tudom, hogy összesen mennyit fogok kapni, csak azt, hogy 80 karakternél egyik sem hosszabb?

A számokkal meg tudom oldani tömbbe, de ugye a sztring már eleve egy tömb. Vagy éppen emiatt egy 2 dimenziós tömböt kell alkalmaznom? De azt hogyan?

(#1881) bpx válasza vamzi (#1880) üzenetére


bpx
őstag

igen, 2 dimenziós tömb kell (char**, vagy char[][] nem dinamikusan)

(#1882) macikos


macikos
addikt

Sziasztok!

Kellene egy gyors kis segítség. Megcsináltam egyik haveromnak a számtech beadandót, de mivel én már régen "C-ztem", így szintaktikailag nem lett a legtökéletesebb a progi és nem tudom lefordítani. Ránézne valaki, hogy mi a gond vele? Pár hiba van benne csak.

[link]

[ Szerkesztve ]

(#1883) Sk8erPeter válasza macikos (#1882) üzenetére


Sk8erPeter
nagyúr

És ez hol C? Ez C++. :)
Nem tudnád feltenni valami normális szintaktika-kiemelős helyre, ahol nem megy szarrá a tördelés? Ez így teljes mértékben átláthatatlan. Pl. pastebin.com
Mellesleg a for ciklusoknál rendszeresen lehagyod az i deklarációját (int i=0; helyett sima i=0;-t írsz, míg a korábbi int i változók csak a cikluson belül élnek)
ezenkívül a clrscr(); nem minden fordítónál működik, helyette működhet pl. a system("CLS");.
Olyan nincs, hogy iostream.h, helyette:
#include <iostream>
Nincs kiterjesztés!
Ezek csak az elsőre feltűnő hibák, de jó lenne, ha felpakolnád áttekinthető, indentált formában, mert ez így nagyon gáz.

Sk8erPeter

(#1884) macikos válasza Sk8erPeter (#1883) üzenetére


macikos
addikt

[link]

Igen, tényleg durva volt a formázás :D

Tényleg, nem lett i deklarálva, írta is a fordító :W

(#1885) Jester01 válasza Sk8erPeter (#1883) üzenetére


Jester01
veterán

Az egésznek egyetlen előnye van: tényleg elhiszik majd, hogy az az illető csinálta aki beadja ... :U

Ez C és C++ keveréke, globális változókkal, gets használatával, puffer túlcsordulással, boolean kifejezések helyett egymásba ágyazott feltételekkel, string-int keveredéssel, értelmetlen cast-olással, logikai hibákkal, abszolút hibakezelés nélkül és még a saját függvényeit is rosszul használja.

Azt, hogy az utolsó két for ciklus mit csinál nem is értem. Az első kikeresi a maximum árat (ami majdnem jó is lenne, ha nem a minimumot kellene) a másik ciklus pedig nem is tartalmaz a ciklusváltozótól függő kifejezést. Egyszerűen átteszi a talált maximum árat db1-ből db2-be. Utána pedig ezt az árat próbálja indexként használni ... ó jajj. Hogy ezek miért db nevű változók az már csak a hab a tortán.

Jester

(#1886) Sk8erPeter válasza Jester01 (#1885) üzenetére


Sk8erPeter
nagyúr

No de ezt miért nekem mondod? :DD
Én mondjuk ilyen szinten meg se néztem, mert kb. 1 perc nézegetés után feladtam, annyira rosszul volt indentálva. Igaz, az utána lévő eredmény is elég fos, mert igazad van, totális keverék az egész, azokkal a hibákkal, amiket leírtál. :)
Még ettől a getch-tól van hányingerem. :D

Sk8erPeter

(#1887) macikos válasza Sk8erPeter (#1886) üzenetére


macikos
addikt

getch-val mi a baj? Nekünk ezt így tanították :D Nagyon idejétmúlt? Ez van :D

Jester01: Köszönöm, akkor egy "kicsit" átdolgozom a kódot :)

A poén az, hogy azért én csinálom meg haveromnak, mert nekem már megvan a C programozás, sőt 4-est kaptam belőle :D (Nem vagyok infós, nyugi ;] )

[ Szerkesztve ]

(#1888) macikos válasza Sk8erPeter (#1883) üzenetére


macikos
addikt

Egyébként az isotream.h miért is nem jó? Megkerestem a saját beadandómat, ami hasonló feladat volt és az működik. Lehet azt átírom :)

(#1889) Jester01 válasza macikos (#1888) üzenetére


Jester01
veterán

Mert a szabvány az #include <iostream>, továbbá using namespace std; ajánlott.
getch ugyancsak nem szabványos, ahol ezt tanítják ott baj van. Természetesen az egész conio.h nem szabványos, a képernyőtörlésre sincs sajnos szabványos megoldás. Ilyen beandadókban általában nincs is jelentősége, sokkal fontosabb (jobb helyeken) az, hogy szabványos kód legyen.

Jester

(#1890) macikos


macikos
addikt

Átírtam a régi programomat, most így néz ki: [link]

Működik, szerintem jó is :)

Már csak a "legolcsóbb kvarc működési elvű, műanyagházas falióra ára"-nak kiiratása kellene.

Minimum keresés algoritmus hogy néz ki? :F Maximum keresés menne, de nem tudom miért, a minimumra nincs ötletem :)

(#1891) Sk8erPeter válasza macikos (#1890) üzenetére


Sk8erPeter
nagyúr

Most komolyan, Te milyen fordítót használsz, amiben ez működik, és ami nem pampog azért, hogy tele van hibákkal? :Y :N
Meg sem próbáltam megérteni a programodat, mert annyi időm nincs :D, de a következő pl. micsoda?
typedef int bool;
? :Y Felül akarod definiálni a bool típust, vagy mi? Ennek semmi értelme.
Ezenkívül a main()-nek nincs vége sehol, plusz ott a legvégén van egy else ágad, ami után van egy felesleges kapcsos zárójeled.
A void main()-hez NE szokj hozzá, int main() a szabványos, és a programod térjen vissza 0-val, ha sikeresen lefutott. Lehet itt magyarázkodni, hogy dehát egyes fordítók elfogadják, stb., de akkor sem helyes.
Ezenkívül ismét van két for ciklusod, amiben i nincs deklarálva int-ként (127. és 157. sor a pastebin-en).
Az meg a legrosszabb, hogy nincs semmiféle hibakezelésed (pl. amennyiben a bemeneti adatok helytelenek, akkor írjon ki hibaüzenetet, majd kérje be újra az adatot, és ehhez hasonlók), ahogy már Jester01 is írta.
Amúgy most kipróbáltam, és felvittem egy karóra meg egy falióra adatait (mellesleg a mutatók számához (amit bekérsz) beírhatok nyugodtan akár 532-t is, azt is elfogadja... :U), és a végén azt írta ki, hogy nincs a nyilvántartásban óra... :) (ergo nem működik)

Mellesleg elég érdekesnek tartom, ha Ti C-t tanultatok, és vegyítettétek a tananyagot az objektum-orientált programozás C++-os elveivel... :Y És ezek szerint a tanár hülyeségeket (csupa nem szabványos dolgot) oktatott nektek. Gáz. :(

Sk8erPeter

(#1892) Karma válasza Sk8erPeter (#1891) üzenetére


Karma
félisten

Ebben semmilyen objektumorientalt elv nem volt... Kivancsi lennek arra a tanarra, aki ilyet lehetove tesz. Asszem elzavarnam utcat soporni vagy arkot asni inkabb.

“All nothings are not equal.”

(#1893) Sk8erPeter válasza Karma (#1892) üzenetére


Sk8erPeter
nagyúr

Igaz, nem fogalmaztam pontosan. :D

Sk8erPeter

(#1894) macikos válasza Sk8erPeter (#1891) üzenetére


macikos
addikt

TurboC. Van ilyen? Na az megeszik mindent :D
Sajnos ez van, nekünk ezt tanították/tanítják. Miskolci Egyetem.

Mindegy, az elsődleges szempont most az, hogy ránézésre jó legyen, hogy haveromnak elfogadják.

minkeresés hogy néz ki?

(#1895) doc válasza macikos (#1894) üzenetére


doc
nagyúr

ha a maximum keresesbol nem tudsz minimumkeresest csinalni, akkor bocs hogy ilyet mondok, de nagyon nincs ott helyed...

a TurboC meg irtozatos, gyakorlatileg nincs egyetlen szabvanyos eleme sem, az ok amiert azt tanitjak sok helyen az, hogy ingyenes (na meg persze a 20 eve kemiatanarbol atkepzett oktatok ezt ismerik, es nem hajlandoat ujat tanulni)

(#1896) Sk8erPeter válasza macikos (#1894) üzenetére


Sk8erPeter
nagyúr

A TurboC-t felejtsd el. Ha erőforráskímélő fejlesztőkörnyezetet akarsz, akkor ott van többek közt a Code::Blocks.
Kérdésre: [link] (akár első találat...)
(egyébként komolyan nem értem, ha a maximumkeresés megy, akkor mi a gondod a minimumkereséssel? :F)

Amúgy meglep, hogy ME-en ilyen szarul tanítják a programozást. :U

[ Szerkesztve ]

Sk8erPeter

(#1897) ArchElf válasza macikos (#1894) üzenetére


ArchElf
addikt

Eh... Miskolci Egyetem. Mi folyamatosan azt röhögtük (Kiegészítő Levelező Info szak), hogy megtanítanak 20 óra alatt C-ben, majd 20 óra alatt C++ ban programozni (első két félév), majd a harmadikban linux alá C-ben IPC-t kellett programozni (shared memory, szemaforok, signaling, stb.) Többen voltak nem infós előélettel az évfolyamban. A legtöbb ember úgy csináltatta meg a beadandót programozó ismerősével (vagy annak híjján pénzért)...
De hát mit várjon az ember, ha pénzért kap papírt (levelező oktatás). A tanárok sírnak, hogy szombat-vasárnap kell bejárni tanítani (mintha nekünk semmi dolgunk nem lett volna hétközben), persze a vizsgát egyesek képesek kedd reggel 8-ra kiírni...
Amúgy nekünk a DevC++ -t próbálták erőltetni, de ennyi óra mellett semmi értelme nem volt az egésznek.

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]

(#1898) Korcsii válasza macikos (#1894) üzenetére


Korcsii
őstag

pl csinálsz két változót: int melyik, mekkora;
A melyik megkapja az első elem sorszámát (i, azaz valószínűleg 0), a mekkora pedig az első elem értékét. Majd egy for ciklussal végignézed az összes többi elemnél, hogy az kisebb-e nála. Ha igen, akkor a melyik megkapja az i értékét, a mekkora meg az adott értéket. Végül a melyik alapján be tudod azonosítani, hogy melyikről van szó... persze ha csak egy adat van, akkor i helyett egyből lehet azt is tárolni... ha meg csak az ár kell, akkor a melyik el is hagyható...
(nem néztem a kódod, és eddig még csak C-ztem, C++ még a jövő zenéje)

[ Szerkesztve ]

(#1899) ArchElf válasza Karma (#1892) üzenetére


ArchElf
addikt

Felmentésem volt, csak első órára mentem be az órájára (ha ugyanarról a tanárról van szó).
Egy 10 soros programot is meg tudott úgy írni, hogy elszálljon tőle a fordító. Háromszor játszotta el (program begépelés, fordítás, fordító elszáll) mentés nélkül - szánalmas volt.

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]

(#1900) macikos válasza doc (#1895) üzenetére


macikos
addikt

"ha a maximum keresesbol nem tudsz minimumkeresest csinalni, akkor bocs hogy ilyet mondok, de nagyon nincs ott helyed..."

Tekintve, hogy Gépész vagyok és nem Infós, így ez valahogy nagyon nem tud érdekelni. Nem emlékezhetek mindenre.

Korcsii: Köszönöm. Tényleg pofon egyszerű volt :D Azt nem tudtam elképzelni, hogy mi alapján választom ki a kezdeti értéket, amihez hasonlítom a többit :D

ArchElf: Az egyik gyaktanáromon akkor sz*rtam be, amikor Visual C++-ben dolgoztunk. Én meg gyorsan csináltam egy olyan programot, hogy leraktam egy gombot és ha ráklikkeltél, akkor elmozdul valamerre x pixelt. Tanár meglátta, álla leesett és ezt mondta: ezt hogy csináltad??? :Y :DDD Szóval ez van.

[ Szerkesztve ]

Copyright © 2000-2024 PROHARDVER Informatikai Kft.