-
Fototrend
Új hozzászólás Aktív témák
-
-=ZS=-
tag
Hali mindenki!
Igen speciális problémám van, már utolsó esélyként irkálok mindenhova. Szóval Delphiben kellene egy komponenst készítenem, ami Clipper progi által készített adatbázisokat kezelne, indexekkel együtt, úgy, hogy teljesen kompatibilis legyen még a régi DOS-os rendszerrel. Valaki nem tudja: amikor a .cdx indexfileban lockolok, akkor hogy számítja ki, melyik bájtok legyenek lockolva? Ezek a bájtok a 0xFFFeFFFF-0xFFFFFFFF tartományból kerülnek ki, minden esetben, akár 1db levél van az indexben, akár 500MB a cucc... Hát nem sok reményt fűzök hozzá, de hátha szerencsém lesz. Köszi!
[Szerkesztve] -
Hujikolp
őstag
válasz Jester01 #1042 üzenetére
Az oprendszer nekem mindegy de ha lehet akkor XP. A nyelv lehetne magyar, mármint a menü meg ilyenek. Sajnos nem értek a programozáshoz ezért keresnék v.kit aki tud nekem segíteni. Ha van olyan program amivel lehet másikat készíteni azt is sívesn megnézném de lehet hogy boldogulok vele...
A program amit szeretnék készíteni, az a COM-1-ra készülne. Azt szeretném, hogy ha én leírok egy szöveget és rákattintok egy gombra, akkor azt kódolja be morse jelekbe, (amit én megtudok neki adni hogy mi legyen pl.:''a'' ''.-'' ) és a megfelelô ütemre a COM porton továbbítsa rövid és hosszú jeleket. Ha például egy ''a'' betüt szeretnék, akkor a COM-porton egy helyen (tökmindegy hol) lead egy pl.:5voltos feszültséget fél másodpercig (ez a rövid) és egy hosszabbat ez 1mp. Így tranzisztor segítségével egy másik áramkörbe tudom helyezni a morse impulzusokat. Az áramkör egy Rádió adó-vevő lenne, ami hang-pittyegésekkel továbítja a másik adónak ami most vevő. A másik adó veszi a jelet és továbbítja a másik PC COM portjához, ami ezután visszakódolja a morzejeleket és utána azt kiírja szövegesen.
Ennél szerintem részletesebben nem tudom leírni. (szerintem).
elöre is köszz -
Protezis
őstag
C++ -ban kellene egy kis segítség.
Graf.h:#ifndef GRAF_H
#define GRAF_H
class Graf {
vector<int> D;
vector<int> Apa;
deque<int> Sor;....
Graf.cpp:#include ''Graf.h''
#include <vector>
#include <deque>
#include <iostream>
using namespace std;
Graf::Graf (char *fajlnev) {....
Rögtön a Graf.h-ban hibát dob, miszerint: missing ; before < (a legelső vectoros sorban)
és missing storage-class or type specifiers... meg még 24 hiba, gondolom legtöbbjük ebből fakad.
Kellene deffiniálnom egy típust? De pl itt: [link] az Algorithms címszó alatti legelső progiban is így használja (meg mi is így vettük gyakon... már amennyit vettük az STL-t)</p></p>
[Szerkesztve]
[Szerkesztve] -
Protezis
őstag
Ezt a retkes C++.... grrrr. Nem tudok megnyitni egy fájlt. C-ben simán megy, itt nem.
#include ''Graf.h''
#include <limits>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
Graf::Graf (/*char *fajlnev*/) {
FILE *fin;
fin=fopen(''feladat.be'',''r'');
fclose(fin);
}
Debugnál FCLOSE.C fájl kéne neki. Azt akarja olvasni. Hülye ez? -
Jester01
veterán
válasz Protezis #1060 üzenetére
Csak kicsit pontosítok: a hülye VC sehol nem keresi a fájlt. A relatív útvonalak mindig az aktuális munkakönyvtárhoz képest értendők. Ha a progidat egy másik dirben állva parancssorból indítom, akkor sem fogja megtalálni. Ha a progidat tartalmazó könyvtárra van szükséged, akkor a GetModuleFileName API függvénnyel kérdezd le az exe abszolút fájlnevét, és abból vágd le a könyvtár nevét.
Jester
-
Deark
csendes tag
Üdv. mindenkinek!
Sürgősen segítségre lenne szükségem. Egy programozási feladat megoldásához kérném a segítségeteket.
A feladat beolvasni fájlból egy szót és a betűit összekeverni. Az összes lehetséges variációt ki kell írni abc sorrendben egy másik fájlba. A bemenő szó 1-10 karakter. Egy karakter max 1x szerepel benne. Kis- és nagybetűk különbözőnek számítanak.
A kérdésem az lenne, hogy ezt hogyan valósítsam meg? Főleg az összes variáció megkeresésével van gondom. A programnyelv c/c++ , de ha más programnyelven (pl.: pascal, basic) tudtok hozzá anyagot, azt is megköszönném. Meg tudom oldani, hogy átírjam c-be.
Előre is nagyon köszönöm -
-
emitter
őstag
a sorba rendezésre itt van egy, de ez csak számokat rak sorba, mingyá előkotrom a stringes verziót is [link]
a betűk megkeverését (amit n! féleképp tudsz megtenni) szvsz vhogy rekurzióval kell (érdemes ) megoldani, a baj csak az, h nem tudom hogyan majd vki okosabb megmondja a tutit
for ciklusokkal is lehetne, de ekkor szvsz annyi ciklus kéne amennyi a string hossza, ez a megoldás márpedig enyhén ronda -
Jester01
veterán
Először rendezd abc sorrendbe a beadott szót. Ez gondolom menni fog.
Utána csinálj egy tömböt amiben jelzed, ha egy betűt már felhasználtál.
Alapesetben ez legyen csupa igaz érték (true/1).
Egy másik tömbben pedig a permutált indexeket gyűjtöd, ez alapesetben egyesével nő.
Rögvest írd is ki, mert ez lesz a legelső permutáció.
A következőt pedig úgy kapod meg, hogy az utolsó karaktertől elindulsz és mindig megkeresed a következő fel nem használt betűt. Ha már nincs ilyen, akkor lépsz eggyel visszább (ha nem tudsz, akkor kész vagy). Amint találtál egyet, ismét elindulsz előre és szépen veszed az első fel nem használt betűt.
Igy valahogy:for(i = len - 1; i >= 0; i--)
{
int current = indices[ i ];
used[current] = 0;
current = findnextunused(used, current + 1, len);
if (current < len)
{
indices[ i ] = current;
break;
}
}
if (i < 0)
{
break;
}
indices[++i] = findnextunused(used, 0, len);
for(i++; i < len; i++)
{
indices[ i ] = findnextunused(used, indices[i - 1] + 1, len);
}
A findnextunused függvényem második paramétere a keresés kezdőpozíciója.
A megtalált betűt be is jelöli, hogy használatban van.
Biztos van egyszerűbb módja, mindig is utáltam a kombinatorikát
Emitter: a rekurziót is utálom De azért persze szoktam használni.
MOD: [ i ]
[Szerkesztve]Jester
-
emitter
őstag
az abc-rendezést meg így tudod megoldani:
<pre>
int string_cmp(char *c1, char *c2)
{
return strcmp (c1,c2);
}
...
int main(void)
{
char* tomb[elemszam];
...
qsort (tomb, elemszam, maxhossz*sizeof (char), string_cmp);
...
}
</pre><p>
ahol maxhossz a tomb legnagyobb sztrigjének a hossza
remélem működni fog, mert ezt most hirtelen a szám-rendezősből írtam át </p>
Jester01:
úgy látszik, rokon lelkek vagyunk
a kombinatorikát én is utáltam (meg még utálni is fogom), a rekurziót meg még nem használtam annyiszor, h ráérezzek a jelentőségére, egyelőre elég nehéz átlátni nekem egy rekurzív függvényt
[Szerkesztve] -
Deark
csendes tag
válasz emitter #1067 üzenetére
Eddig a betűk keverésére nem találtam lineáris algoritmust...
Gondoltam arra, hogy randomizálom az egészet és mindig megvizsgálom, hogy már megvan-e az adott string, de ez egy 10 betűs szónál túl sok lenne. Max 1 mp alatt le kéne futnia.
Gondoltam még arra is, hogy számrendszerekkel hozom össze valahogy. Tehát hogy olyan számrendszer, ahány karakteres a string. De még nem tom, hogy hogyan...
Szerintem a sok ciklus nem lenne ronda, azaz nem lenne baj, ha az. Max 10 betűs lehet a szó. (ezt nem kell ellenőrizni. alapból ilyen szavakkal lesz feltöltve.) -
emitter
őstag
ha text-fájl olvasásakor új sorba akarok pozicionálni, azt hogyan kell?
fscanf(fajl,''\n'');
miért nem jó?
fgetc() karaktert olvas be vagy számot?
ez a sor helyes (ha i integer, és a fájlban egész számok vannak pl. 01001101)?
i=fgetc(fajl); -
Jester01
veterán
válasz emitter #1075 üzenetére
fscanf példád azért nem jó, mert a \n whitespace, és mint ilyen, azt jelenti, hogy bármennyi bármilyen whitespace lehet ott. Helyette (ha mindenképp fscanf kell) a fscanf(f, ''%*[\n]'') lehet jó. Mit jelent az, hogy új sorra pozícionálni? Eldobni a sorból hátralévõ összes karaktert? fscanf(f, ''%*[^\n]%*[\n]'').
Az fgetc() karaktert olvas be.
A sor helyes, csak nem azt csinálja amire te feltehetõleg gondolsz. Az i egymás utáni hívások esetén 48 vagy 49 lesz (a 0 és az 1 ascii kódja).Jester
-
Jester01
veterán
válasz emitter #1070 üzenetére
remélem működni fog, mert ezt most hirtelen a szám-rendezősből írtam át
Sajna nem fog
qsort (tomb, elemszam, maxhossz*sizeof (char), string_cmp);
...
ahol maxhossz a tomb legnagyobb sztrigjének a hossza
Itt egy (char*) elemeket tartalmazó tömböt rendezel. Vagyis helyesen:
qsort (tomb, elemszam, sizeof(char*), string_cmp)
A stringek hossza nem számít. Amúgy jelen feladat esetén ha a string betûit rendezzük, akkor a generált permutációk már eleve a jó sorrendben jönnek ki. Tehát nem ilyen rendezés kell, hanem az eredeti (a számos), csak nem int hanem char típussal.Jester
-
Hujikolp
őstag
Tudja valaki hogy delphiben/pascalba hogyan kell lpt-ről beolvasni?
ReJim! Remélem ráéersz majd...
Jester01!
''DOS alatt a 0x378-as I/O portot kell írni/olvasni.
Windows alatt szintúgy, de csak kernel módban lehet.
Lehet a neten találni kész driver dllt.''
Ez most mit takar?
Keresek NOKIA 3410-est olcsón, csak az legyen a lényeg hogy telefonálásra lehessen használni. Buheráláshoz kell.
Mivel lehet *.MID-be tömöríteni zenét? -
Jester01
veterán
-
emitter
őstag
válasz Jester01 #1076 üzenetére
oké, értem
akkor hogyan tudom a beolvasott számok ascii értékei helyett a valódi értéküket megkapni?
van erre vmi konvertáló fv?
for(i=0;i<my;i++) //az allas beolvasasa
{
for(j=0;j<mx;j++)
{
mezo[ i ][ j ].akna=fgetc(fs);
printf(''%d'',mezo[ i ][ j ].akna);
}
temp=fgetc(fs); //EOL-karakter olvasása
printf(''\n'');
}
így 48, meg 49 értékeket ír ki -
emitter
őstag
válasz Jester01 #1081 üzenetére
na neeee! ennyire nem lehetek lámer kicsit le vagyok fáradva...
oks, így megy a dolog, köszi
viszont újabb kérdésem akadt:
ha egy fv-nek kimenő paraméterként akarok átadni int értékeket, azt gondolom érték szerint nem lehet, vagy igen?
ez így nem műxik, hogyan írjam át, h jó legyen?
...
void load(char *fajl, int *mx, int *my, palya **mezo)
{
...
fscanf(fajl,''%d'',&mx);
fscanf(fajl,''%d'',&mx);
...
}
...
int main()
{
int mx, my;
...
load(''proba.txt'', mx, my, mezo);
...
}
az mx, my változóknak a load fv adna értéket, kimenő paraméterként
szal mikor meghívom a load fv-t, nem adok át neki bemenő mx,my értéket, viszont azt akarom, h ő adjon vissza mx,my-t
remélem érthető vok -
Jester01
veterán
válasz emitter #1082 üzenetére
Az & jel nem kell a fscanf-be, mivel már eleve pointered van.
Ellenben a függvényhívásnál viszont kell.fscanf(fajl,''%d'',mx);
...
load(''proba.txt'', &mx, &my, mezo);
MOD: Ja és mielõtt lábon lövöd magad: a második fscanf-be nyilván my-t akartál írni
[Szerkesztve]Jester
-
Hujikolp
őstag
ReJim akkor tudnál nekem segíteni??
-
emitter
őstag
válasz Jester01 #1084 üzenetére
na, ma átnézettem a kódot az C-tanárommal, úgyhogy kicsit tisztább lett a kép a kimenő paramétereket illetően
azóta viszont újabb érdekes probléma adódott, futtatáskor ezt kapom:
[Warning] parameter names (without types) in function declaration
<pre>
int load(char *fajl, int *mx, int *my, palya **mezo)
{
...
char *temp;
...
temp=malloc((*mx)*(*my)*sizeof(char));
...
fscanf(fajl,''%s'',temp);
...
free(temp);
...
}
</pre><p> </p>
[Szerkesztve] -
emitter
őstag
válasz Jester01 #1088 üzenetére
oks, megint igazad volt
most műxik, de futás után rögvest bezárja a konzolablakot, pedig nem kéne neki
ha főprogramból nem hívom meg a load() fv-t (kikommentezem), akkor ok a progi futása,
amúgy meg bezáródik
int load(char *fajl, int *mx, int *my, palya **mezo)
{
FILE *fs;
int i=0, j=0;
char c;
char *temp;
fs=fopen(fajl,''rt'');
fscanf(fs,''%d'',mx);
printf(''%d\n'',*mx);
fscanf(fs,''%d'',my);
printf(''%d\n\n'',*my);
mezo=malloc((*my)*sizeof(palya*)); //dinamikus memoriafoglalas
if(mezo==NULL)
{
fprintf(stderr,''\nKeves a memoria!\n'');
return -1;
}
for(i=0;i<(*my);i++)
{
mezo=malloc((*mx)*sizeof(palya));
if(mezo==NULL)
{
fprintf(stderr,''\nKeves a memoria!\n'');
return -1;
}
}
temp=(char*)malloc((*mx)*(*my)*sizeof(char));
for(i=0;i<*my;i++) //az allas beolvasasa
{
fscanf(fs,''%s'',temp);
printf(''%s'',temp);
for(j=0;j<(4*(*mx));j++)
{
mezo[ i ][ j ].akna=c-48;
mezo[ i ][ j ].reveal=fgetc(fs)-48;
mezo[ i ][ j ].mark=fgetc(fs)-48;
mezo[ i ][ j ].szomsz=fgetc(fs)-48;
printf(''%d'',mezo[ i ][ j ].akna);
}
printf(''\n'');
}
free(temp);
fflush(fs);
fclose(fs);
}
egy pillanatra látom felvillanni az ablak tartalmát, és kiírja rendesen a beolvasott cuccokat, de aztán nagy semmi -
Jester01
veterán
válasz emitter #1089 üzenetére
A temp az minek is? A c változót hol inicializálod? A ciklusban j miért 4*(*mx) -ig megy?
Gondolom azt akartad csinálni, hogy a temp-be beolvasod a sort, és aztán abból alakítod át a saját adattípusodra. Ez persze fölösleges, ha úgyis fgetc-t hívsz.for(i=0;i<*my;i++) //az allas beolvasasa
{
for(j=0;j<*mx;j++)
{
mezo[ i ][ j ].akna=fgetc(fs)-48;
mezo[ i ][ j ].reveal=fgetc(fs)-48;
mezo[ i ][ j ].mark=fgetc(fs)-48;
mezo[ i ][ j ].szomsz=fgetc(fs)-48;
printf(''%d'',mezo[ i ][ j ].akna);
}
MOD: az persze kérdés, hogy a mentett állásban táblasorok után van-e enter, vagy egy sor az egész. A fenti kód akkor működik, ha egy sor.
[Szerkesztve]Jester
-
emitter
őstag
válasz Jester01 #1090 üzenetére
Igen, elég zavaros volt, kijavítottam a hibákat. A fájlban a mezőket mátrix-formában tárolom, szal Enterrel a sorok végén, ezért kell először egy átmeneti temp-változóba olvasni.
Most ott tartok, h műxik a dolog, kiírja a képernyőre a fájl helyes tartalmát, de rögtön lefutás után feldob egy hibaüzit, h a ''0x7c...'' címen található utasítás ''0x00...'' mem.címre hivatkozott. stb.
[link]
és ha kell, itt a file [link] -
emitter
őstag
-
Jester01
veterán
válasz emitter #1092 üzenetére
Ez most jónak tűnik, kivéve, hogy a temp változó mérete eggyel kisebb mint kellene, mert a fscanf tesz egy lezáró nulla byteot a beolvasott string végére. De hogy ettől fagy-e azt nem tudom. Esetleg a program másik részében lehet hiba. (Miért nem rakod ki az egészet a weboldalra? )
Amúgy a k változóra nincs szükség, mert egyszerűen 4*j módon számítható. De ez nyilván nem hiba. Legközelebb holnap este leszek, remélem addig segít valaki más[Szerkesztve]
Jester
-
Sianis
addikt
Sziasztok!
C programozás a téma...
Szükségem lenne egy véletlen szám generátorra, a C beépítettje nem a legjobb sajnos, valami olyan kéne, aminek nagy a ciklusideje(tehát nagyon sokára ismétli meg a számokat). Elvileg létezik is C alatt, csak nem tudom hogyan kell meghívni, pedig nagyon kéne... pls ha valakinek van ötlete, esetleg egy függvénye, ami 0-1 között generál véletlen számokat úgy, hogy azok bizotsan nem egyezzenek úgy 100000 vagy 1000000 időn belül... -
Sianis
addikt
Nem nem, nem arról van szó! Hanem van egy beépített függvénye, ami asszem 65000 szám után már ismétlődik, és van egy ami ettől sokkal, sokkal később veszi fel ugyanazt az értéket. Sajnos egy igazán jó véletlen szám generátor 1-2 millió forintba kerül, ezért van az, hogy a beépített igazából nem is annyira véletlen, mégis valamennyire használható...
Új hozzászólás Aktív témák
● olvasd el a téma összefoglalót!