-
PROHARDVER!
Új hozzászólás Aktív témák
-
pawee
tag
hogy zárjam le???\0 val vagy hogy gondoltad?
sőőt azon gondolkodok hogy ha minden bemenetben csak egy szóvan akkor nem is kell for ciklus, nem???
[Szerkesztve] -
pawee
tag
egysor elég...minden bemeneti fájlban csak egy szó van
basszus tényleg... a ;-t észre sem vettem...
[Szerkesztve] -
-
pawee
tag
és ha eg for cikulsba rakom be és így néz ki az eleje hogy:
for (i=0;strlen(stri);i++)
{
...
} -
pawee
tag
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//file-változók deklarálás
int main ()
{
//változók deklarálása
FILE *fin;
FILE *fout;
int i,j;
char stri[160];
char stro[160];
char ch;
//file-ok megnyitása
fin = fopen(''be.txt'',''rt'');
fout = fopen(''ki.txt'',''wt'');
//inicializásás
j=0;
i=0;
fscanf(fin,''%s'',stri);
//átalakítások
while (!feof(fin))
{
i++;
ch = stri;
//síma ékezetes nagy betűk
if (ch == 'Á');
{
stro[j] = 'A';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'É');
{
stro[j] = 'E';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'Í');
{
stro[j] = 'I';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'Ú');
{
stro[j] = 'U';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'Ó');
{
stro[j] = 'O';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'Ű');
{
stro[j] = 'U';
++j;
stro[j] = '\''';
++j;
}
if (ch == 'Ő');
{
stro[j] = 'O';
++j;
stro[j] = '\''';
++j;
}
if (ch == 'Ö');
{
stro[j] = 'O';
++j;
stro[j] = ':';
++j;
}
if (ch == 'Ü');
{
stro[j] = 'U';
++j;
stro[j] = ':';
++j;
}
//síma ékezetes kis betűk
if (ch == 'á');
{
stro[j] = 'a';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'é');
{
stro[j] = 'e';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'í');
{
stro[j] = 'i';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'ú');
{
stro[j] = 'u';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'ó');
{
stro[j] = 'o';
++j;
stro[j] = '\'';
++j;
}
if (ch == 'ű');
{
stro[j] = 'u';
++j;
stro[j] = '\''';
++j;
}
if (ch == 'ő');
{
stro[j] = 'o';
++j;
stro[j] = '\''';
++j;
}
if (ch == 'ö');
{
stro[j] = 'o';
++j;
stro[j] = ':';
++j;
}
if (ch == 'ü');
{
stro[j] = 'u';
++j;
stro[j] = ':';
++j;
}
// repülő ékezet átírása síma ékezetté, nagybetűk
//repülőékezet átírása síma ékezetté, kisbetűk
}
//az átalakított string kiírása
fprintf(fout,''%s'',stro);
//file-ok lezárása
fflush(fout);
fclose(fout);
}
repülőékezetes probléma...szerintetek miért nem fut???lefordulni lefordul, de futásidejű hibával leáll, fuási hiba 11 vmi ilyet ír ki a bíró -
Jester01
veterán
-
doc
nagyúr
'reggelt
szeretnék soros portot programozni C++-ban
ehhez keresek valamilyen FREE libet. sajna vindóz alá kéne, így a legegyszerűbb megoldás (/dev/tty kezelése) kiesett... -
-
shev7
veterán
válasz
Dufresne #2183 üzenetére
nemtudom minek erre progit irni, de tessek
Sub Dufresne()
Dim osszeg, db As Integer
osszeg = 0
darab = 0
For i = 1 To 10
If (i Mod 2 = 0) Then
osszeg = osszeg + i
darab = darab + 1
Cells(3, 3 + darab) = i
End If
Next i
Cells(1, 4) = osszeg / darab
Cells(2, 4) = darab
End Sub
MOD: akar te is atirhattad volna
[Szerkesztve] -
s1ny1
tag
tudnátok segíteni? egy olyan programra lenne szükségem amellyel vissza lehet fejteni egy *.exe fájlt ami nagy valószínűséggel c++ környzeteben készült. vagy ha esetleg a c++ -on belül közvetlenül megoldható annak is örülnék
[Szerkesztve] -
shev7
veterán
válasz
Forest_roby #2175 üzenetére
azthiszem c-ben is mukodik, hogy eleirsz egy 0x-et. Tehat az á az a 0xe1.
Vagy atszamolod decimalisba. -
pawee
tag
válasz
Forest_roby #2168 üzenetére
egyébként azt ajánlották hogy ezzel a kódlappal csináljam
http://www.aihara.co.jp/~taiji/tops/images/iso-8859-2.gif
és ebben ahogy nézem van ékezetes betű -
Jester01
veterán
#include <stdio.h>
int main (int argc, char *argv[])
{
FILE *be;
int c;
char *t[256] = { 0, };
t[(unsigned char) 'á'= ''a''';
t[(unsigned char) 'Á'= ''A''';
be = fopen (argv[1], ''r'');
while ((c = fgetc (be)) != EOF)
{
if (t[c] == NULL)
{
fputc(c, stdout);
} else {
fputs(t[c], stdout);
}
}
fclose (be);
return 0;
} -
Jester01
veterán
válasz
bambano #2159 üzenetére
1. nem mindegy, hogy mit szokik meg.
2. Nem az fgetc-nél kell a cast, az valóban úgy van ahogy írtad. Hanem a táblázat feltöltésénél, ahol karakter konstansot használsz. Itt, ni:
t['á']=''a''';
3. Nekem megy. Ellentétben a tieddel, mert az - mint említettem - túlolvas és aztán mínusz egyet (EOF) használ tömb indexnek.
[Szerkesztve] -
Forest_roby
őstag
válasz
Jester01 #2141 üzenetére
Hi!
Ezt így ezzel a táblázattal biztos, hogy nem tudom én megcsinálni. Az ékezetes betűk indexelésénél vannak problémák. Ha utf-8 kodolásban írom a progit, akkor az ékezetes betűk két helyet foglalnak el és hibaüzenet jön... Ha átalakítom a progit iso-8859-2 kodolásura, akkor meg nem jelennek meg az ékezetes betűk a progiban és bár működni fog a program, rosszúl fog működni....
Mit tanácsolnál? /bár nem nekem fontos a dolog.... -
Pho3bus
tag
sziasztok!egy óriási segitség kellene!!megirtam a köt progimat és a biró(igy hivják azt a programot ami ellenőrzi) nem akar rá pontot adni és ma van az utolsó határidő, h beadjam!!eleget szenvedtem vele ahhoz h ne kapjak rá pontot!!lenne olyan szives valaki h átnézné...megköszönném!!
-
SN2O
aktív tag
Sziasztok
Eléggé nagy bajban vagyok miel ''c''-ben tanulok programozni és mostanában kell elkészítenem az első ''kötelező'' programom, de a gyakorlatvezető tanár nagyon kevés segítséget adott(szinte semmit)! Még arra se volt hajlandó(''nincs rá idő'' kifogással), hogy az órán elkészítsen előttünk egy minimális programot, hogy legalább egyet lásunk!
Szóval eléggé nagy bajban vagyok ezért próbálok tőletek segítséget kérni:
A feladatom az, hogy egy ''be.txt'' nevü fájlból beolvassak egy számot (a szám maximum 999 999 999 999 -lehet) és sorvégjel van a szám utánn.
Ezután egy ''ki.txt'' nevű fájlba betűvel kell, hogy kiírja ugyanazt a számot ami a be.txt-ben volt.
Bármilyen segítségnek nagyon örülnék!
Légyszi ha valaki tud! -
bdav
őstag
válasz
bambano #2154 üzenetére
str2t majd a hívó fél, ha változót adsz paraméterül akkor ciki lenne ha felszabadítaná, ha nem akkor abban nem vagyok biztos
realloccal igazad van, de C-ből a beépített függvényekből elég keveset tudok fejből (amikor tanultam nem kellett, azóta meg nem programozok C-ben) -
bambano
titán
válasz
Jester01 #2157 üzenetére
1. A változókat nem akartam a mainben lokálisnak, 5 soros programnál mindegy.
2. Az int is megfelel unsigned char helyett, az fgetc a linux manual szerint:
'' fgetc() reads the next character from stream and returns it as an unsigned char cast to an int, or EOF on end of file or error.''. A signed charral nekem is volt gondom, ebben igazad van.
3. Próbáltam az fgetc-t tesztelni EOF-ra, nekem nem jött össze, pedig valóban az a kényelmes és hagyományos megoldás.
A kétbájtos kódlapokkal a kérdező küzdeni fog
Egyébként ha már kötözködés: tök felesleges így ebben a formában programot írni, egyszerűbb recode-dal legyártatni egy táblázatot és azzal konvertálni. -
shev7
veterán
válasz
Dufresne #2151 üzenetére
ha a szamok az A1:A10-ben vannak:
Sub Dufresne()
Dim osszeg, db As Integer
osszeg = 0
darab = 0
For i = 1 To 10
If (Cells(i, 1) Mod 2 = 0) Then
osszeg = osszeg + Cells(i, 1)
darab = darab + 1
Cells(3, 3 + darab) = Cells(i, 1)
End If
Next i
Cells(1, 4) = osszeg / darab
Cells(2, 4) = darab
End Sub
Akkor a d1-ben lesz az atlag, d2-ben a darabszam d3-tol kezdve pedig sorban a paros szamok. -
Jester01
veterán
válasz
bambano #2156 üzenetére
1. A változókat gondolom a main-be lokálisan akartad tenni
2. Mint említettem az unsigned char cast szükséges. Pl. x86 linuxon gcc 4.0 esetén (most ez van kéznél) a char az signed és emiatt nem mûködik a progi.
3. az feof tesztelés így nem jó, túlolvas. Egyszerûen az fgetc visszatérési értékét kell EOF-fal összehasonlítani.
Bocs a kötözködésért.
Még egy apró gondolkoznivaló a kérdezõnek: vigyázz milyen kódlapot használsz. -
bambano
titán
válasz
bambano #2155 üzenetére
#include <stdio.h>
FILE *be;
char *t[256];
int i,c;
int main(int argc, char *argv[]) {
for(i=0;i<256;i++) t=NULL;
t['á']=''a''';
t['A']=''A''';
be=fopen(argv[1],''r'');
while(!feof(be)) {
c=fgetc(be);
if(t[c]==NULL) {
printf(''%c'',c); } else {
printf(''%s'',t[c]); }
}
fclose(be);
return 0;
} -
bambano
titán
#include <stdio.h>
FILE *be;
char *t[256];
int iii,c;
int main(int argc, char *argv[]) {
for(iii=0;iii<256;iii++) t[iii]=NULL;
t['á'=''a'''; // itt felsorold az összes átírnivalót
t['A'=''A''';
be=fopen(argv[1],''r'');
while(!feof(be)) {
c=fgetc(be);
if(t[c]==NULL) {
printf(''%c'',c); } else {
printf(''%s'',t[c]); }
}
fclose(be);
return 0;
}
nekem ennyiből megállt. rendes helyen nem ártana ellenőrizn az argumentumok számát, meg hogy meg lehet-e nyitni a file-t meg ilyenek. de most mindjárt hajnali kettő
Szerk: a kódbeszúrás nem ment elsőre
ohh,de jó, hogy a t tömb i indexét smileynak vette a fórumszoftver...
[Szerkesztve]
[Szerkesztve] -
pawee
tag
válasz
Forest_roby #2150 üzenetére
ha esetleg sikerül, akkor átnyomhatnád a forrást, megnézném, tényleg érdekes!!!
-
Dufresne
addikt
Én kis basic-es kérdésemre semmi?
[Szerkesztve] -
Forest_roby
őstag
jah, van!
A lefoglalt memóriaterületet amikor kezded feltölteni szöveggel az trükkös rész. Lehet egyszerűen csinálni és lehet jól csinálni. ha minden ciklusban megkeresed a szöveg végét az nem tul hatékony eljárás lenne. A lefoglalt memóriaterület pointerét le kellene másolni és minden ciklusban növelni az értékét annak megfelelően, hogy 1 karakterrel nőt elötte a szöveg v 2 -vel. igy mindig jó helyen állna a pointer. Kiváncsi lennék, hogy ezt hogy valósítanák ( hogy valósítanám meg? ) -érdekes feladat.... Lehet nekiálok! -
pawee
tag
válasz
Forest_roby #2147 üzenetére
thx mindenkinek, asszem menni fog, minnyárt neki állok, majd eccer leisszuk egy pár sörrel...
MOD: persze, ha van még esetleg vmi építő ötlet, szívsen fogadom
[Szerkesztve] -
bdav
őstag
válasz
Forest_roby #2146 üzenetére
én így csinálnám:
void append(char* str1, char* str2)
{
int len=strlen(str1)+strlen(str2)+1;
char* temp=str1;
str1=malloc(sizeof(char)*len);
//itt valahogy belemásolod az str1be a tempet és mögéírod str2-t, akár beépített
//függvényekkel vagy egy ciklussal, lezárni ne felejtsd el
free(temp);
}
ekkor az első paraméterhez hozzáfűzi a másodikat.
ja és kimenet számára nem kell lefoglalni előre helyet, append foglal magának (ha raksz bele ellenőrzést str1 nullságára, akkor lehet így:
char* str=null;
append(str, ''akarmi'' /*ide jöhet változónév is */ );
[Szerkesztve] -
Forest_roby
őstag
válasz
Forest_roby #2146 üzenetére
mondjuk én ilyesmire gondoltam:
Feltöltöd a táblázatodta ugy, ahogy Jester01 mutatta:
char* tabla[255] = {0, }
tabla[ (unsigned char)'á' ] = ''a''';
tabla[ (unsigned char)'é' ] = ''e''';
stb....
...
utánna lefoglalsz egy elegendően nagy memóriaterületet (malloc) és végigmész karakterenként a szövegen, végrehajtod a cserét mindig és ezt szépen lejegyzed a memterületre -mindig hozzáfűzéssel és a végén a lefoglalt memterületeden ott lesz a szép uj szöveged! -
bdav
őstag
ezzel a legnagyobb baj az h. karaktert akarsz stringgel hasonlítani. u.i. ha jól látom ahogy a motor legyakta az [ i ] -t akkor ez van:
switch(str_in [i ])
{
...
case ''á''
...
namost az str_in[ i] az 1 db char típusú lesz a ''á'' viszont char* ot eredményez. ''á'' helyett 'á' kellene.
másik gáz az lesz hogy az str_outban mindig csak egy karakter kerül majd be. ráadásul ezt megcsinálod hogy str_out = ''á'' akkor az foglal szépen helyet egy egy karakter hosszú stringnek, lezárja \0-al aztán ha mögé akarsz írni akkor az hogy string_out[ 2] az nem túl szép és nem is fog működni (az 1 dolog hogy nem lefoglalt memóriaterületre írsz, de ugyis csak a \0-ig látja stringnek, ha meg azt írod felül akkor a memóriát kilistázza majd az első 0-ig)
a helyedben én írnék egy eljárást ami két char* -ot vár paraméterül és a másodikat hozzáfűzi az elsőhöz (nemtom van e ilyen beépített függvény v. nincs). Vagy használj C++-t és String osztályt
mégvalami: 2 C stringet nem tudsz ==-vel összehasonlítani, arra való az strcmp, pár hszel ezelőtt volt róla szó.
[Szerkesztve] -
Jester01
veterán
Nem lesz jó, mert az str_out tömbbe nem indexelhetsz ugyanúgy i-vel. Hiába írod, hogy str_out[i+1] a következő iterációban felülírod, mivel a ciklusfejben i++ van.
Vezess be egy másik változót, ami kimenő index.
Amúgy a táblázatos megoldás szerintem is jobb lenne.
MOD: de csak egy dimenzió kell. Az index a bemenő karakter, az elem pedig a helyettesítés. Pl ilyesmi lehet
char* tabla[255] = {0, }
tabla[(unsigned char)'á'= ''a''';
tabla[(unsigned char)'é'= ''e''';
...
Vigyázni kell, hogy unsigned char legyen, mert különben elképzelhető, hogy pont az ékezetes karakterek negatív kódot kapnak ami tömb indexelésnél nem túl hasznos.
[Szerkesztve] -
pawee
tag
válasz
Forest_roby #2137 üzenetére
include <stdio.h>
int main()
{
//változók felvétele
char str_in[160], str_out[160];
int i;
//file változók felvétele
FILE *input;
FILE *output;
//fileok megnyitása
input = fopen(''be.txt'',''r'');
output = fopen(''ki.txt'',''w'');
//konvertálás
for (i=0;i <= 80;i++)
{
switch (str_in)
{
// a program első fele, a síma ékezetest átalakítjuk repülőékezetre
case ''á'' :
{
if (str_in == ''Á'')
{
str_out = ''A'';
str_out[i+1] = ''''';
}
if (str_in == ''á'')
{
str_out = ''a'';
str_out[i+1] = ''''';
}
}
case 'é'||'É' :
{
if (str_in == ''É'')
{
str_out = ''E'';
str_out[i+1] = ''''';
}
if (str_in == ''é'')
{
str_out = ''e'';
str_out[i+1] = ''''';
}
}
case 'í'||'Í' :
{
if (str_in == ''Í'')
{
str_out = ''I'';
str_out[i+1] = ''''';
}
if (str_in == ''í'')
{
str_out = ''i'';
str_out[i+1] = ''''';
}
}
case 'ö'||'Ö' :
{
if (str_in == ''Ö'')
{
str_out = ''O'';
str_out[i+1] = '':'';
}
if (str_in == ''ö'')
{
str_out = ''o'';
str_out[i+1] = '':'';
}
}
case 'ü'||'Ü' :
{
if (str_in == ''Ü'')
{
str_out = ''U'';
str_out[i+1] = '':'';
}
if (str_in == ''ü'')
{
str_out = ''u'';
str_out[i+1] = '':'';
}
}
case 'ó'||'Ó' :
{
if (str_in == ''Ó'')
{
str_out = ''O'';
str_out[i+1] = ''''';
}
if (str_in == ''ó'')
{
str_out = ''o'';
str_out[i+1] = ''''';
}
}
case 'ő'||'Ő' :
{
if (str_in == ''Ő'')
{
str_out = ''O'';
str_out[i+1] = '''''';
}
if (str_in == ''ő'')
{
str_out = ''o'';
str_out[i+1] = '''''';
}
}
case 'ú'||'Ú' :
{
if (str_in == ''Ú'')
{
str_out = ''U'';
str_out[i+1] = ''''';
}
if (str_in == ''ú'')
{
str_out = ''u'';
str_out[i+1] = ''''';
}
}
case 'ű'||'Ű' :
{
if (str_in == ''Ű'')
{
str_out = ''U'';
str_out[i+1] = '''''';
}
if (str_in == ''ű'')
{
str_out = ''u'';
str_out[i+1] = '''''';
}
}
//A program első második fele még nem írtam meg...
default:
{
str_out = str_in;
}
}
}
fflush(input);
fflush(output);
fclose(output);
}
még eléggé kezdő vagyok a dologban, de az assembly-s megoldás az tényleg jóóó. értem mit akarsz mondtani vele.
ha pl egy két dimenziós tömbbel csinálnám meg???az eélső dimenzió az ákezetes betű második meg a percsis változata és ha egyezik akkor behelyettesít, így jó szted?
csak ezzel is az a baj, hogy Á betű helyett már A' lesz mi már két kari...erre is ki kell találnokm még vmit -
Dufresne
addikt
Bedobom ide is hátha
Sziasztok!
Nektek profiknak biztos egyszerű, de nekem mivel nem is tanultam és igazából nincs is rá szükségem kicsit nehéz.
Szóval excel visual basic részében kéne kis progit írni, ami 1-tő 10-ig végignézi a számokat, aztán kiírja az összes páros szám átlagát, majd még kilistázza, hogy hány darab páros szám van, vagy a páros számokat konkrétan.
Tudom, hogy ez nem túl sok, szóval ha valamelyikötök lenne olyan kedves és akár priviben megoldaná nekem, annak örök hálám -
Tottu
senior tag
Elkezdtem ujra a progit, de vmi nem stimmel a beolasással:
#include <stdio.h>
#include <string.h>
FILE *fbe , *fki;
int main (){
long int eredmeny[2] , kov_szam[2];
int i;
char elojel[1] , muv[1];
fbe = fopen(''be.txt'',''r'');
fki = fopen(''ki.txt'',''w'');
fgets(elojel,1,fbe);
if (elojel[0] == '-'){
eredmeny[0]= '-';
fscanf (fbe , ''%d'' , &eredmeny[1]);
} else {
eredmeny[0]= '+';
}
printf (''%d%d'',eredmeny[0],eredmeny[1]);
scanf(''%d'',&muv);
fclose (fbe);
fclose (fki);
return 0;
}
Az benne a bibi, hogy fordítva olvassa be a számokat: pl.: 234 helyett 432. -
Forest_roby
őstag
miért nem másolod be ide? Aztán eldöntjük, hogy akarunk -e foglalkozni vele vagy nem.
Előljáróban:
assemblys trükk - xrate ( translate szlengesen ) asszem a parancs neve. Nyugi, nem assemblys megoldást akarok mondani. A lényeg az, hogy csinálhatnál egy nagy táblázatot, amiben az egyes karakterekhez egy másikat rendelsz. Ezt be a memóriába és utánna már csak a táblázaton kell keresni az adott karakter párját. Ennél gyorsabb, működő megoldást nem fogsz csinálni az tuti!
Sok sikert!
mod: mondjuk nem részleteztem a módszer lényegét, de talán nem is kell. Ha érdekel: fontos, hogy minden karakternél futtas egy keresést a táblán és cserélj, ha nem akarnál cserélni az adott helyen akkor a táblában a karakter párja saját maga...... -persze itt nem egy karakter van hanem több, ez nem lehet akadály... : )
[Szerkesztve] -
pawee
tag
Elkezdtem csinálni egy programot ami az síma élezetes betűket repülő ékezetté alakítja és vissza(kis és nagybetűt egyaránt átalakít).
Á -> A'
Ű -> U''
ö -> o:
a problémám az lenne hogy a switch utasításnál megadom a kar.tömb i-edik elemét szelektornak, de a case-nél már az ''á'' esetet nem fogadja el.
meg valamiért nem tudom arra is ír hiba üzit,hogy ha a az i+1 dik elemnek akarnék '' vagy ' értéket adni. én az ASCII kódokkal való operálásra gondoltam, de ott meg az nem tudom hogy hogy kell lekérni az adott karakter ASCII kódját.
viszon az átalkításnál már az i és az i+1-dik karaktert is néznem kell azt meg case szerkezettel nem lehet.
A kapott hiba üzik amiket kapok:
================================
1.)operadns of = have illegal type 'char' or 'pointer to char'
2.)operadns of == have illegal type 'char' or 'pointer to char'
:confused: :confused:
3.)Unterminated string or char const.
ha lenne vmi ötletetek, hogy hogy kellene megcsinálni, szívesen fogadnám. előre is köszönöm szépen a segítséget!!!
ha valakit esetleg megmozgatna a dolog akkor elküldhetem az eddig megírt forrást -
RexpecT
addikt
válasz
gelencser26 #2134 üzenetére
És valami megoldás?? Ha lenne akkor kuldj mar privit ... thx
-
RexpecT
addikt
Félig OFF:
Wifis netem van és weben kell bejelentkeznem.Na de van amikor ledob a net... én meg toltenék ... de mivel nem vagyok otthon ezertnem tudok ujra bejelentkezni. Kérdés h mennyire bonyolult egy olyan progit fejleszteni ami automatikusan felmegy es''beirja'' a jelszot ha nincs net? Vagy van ilyen progi?? plz help -
shev7
veterán
pedig annyira nem bonyolult. Foleg ha egy kis vizsgalatot vegzel elotte... Ha a masodik szam elojele negativ, akkor ugye siman csereled a muveletet. Marad 4 eset: elso negativ, muvelet kivonas: egyszeru osszeadas, csak az eredmeny negativ. Elso pozitiv, muvelet osszeadas: ezzel nincs gond. A maradek ket eset: (elso negativ, muvelet osszeadas, elso pozitiv, muvelet kivonas) En elobb eldontenem, abszolutertekben melyik a nagyobb (ebbol kovetkezik, hogy mi lesz az elojel) majd a nagyobbol vonnam ki a kisebbet, igy mar a muvelet elvegzese kozben nem valtozik az elojel.
-
Tottu
senior tag
Működk az csak nem 100%-os. Eddig azzal (is) voltak gondok hogy a műveletijel össze vissza változhat és az nem működött rendessen, de azt kijavítottam és így kaptam 2 pontot. Tudtommal egy hiba van még, mégpedig abban az esetben amikor a művelet elvégzése után meg változik az előjel. Ekkor vmi naon cifra szám jön ki (az előjel az jó)
Már többször végig próbáltam papíron is, de nem tudtam rájönni mi lehet a gond. De majd ha lesz még időm akkor leülök elé és próbálkozom.
-
shev7
veterán
válasz
Forest_roby #2124 üzenetére
arra nem gondoltal, hogy konkretan olyan, hogy string nincsen a c nyelvben? Talan azert jottek letre ezek a fv-ek hogy lehetove tegyek a string kezelest, es nem azert, hogy megkonnyitsek?
''szoveg1''+''szoveg2'' meg erdekes kerdes. Ezt egybekent sem szeretjuk, mert ''draga'' muvelet. -
Jester01
veterán
válasz
Forest_roby #2124 üzenetére
Vita egy szál se. Szakmai vita meg különben is hasznos
A C egy viszonylag alacsony szintû nyelv, amiben (mmint magában a nyelvben) tulajdonképpen nincs is string kezelés a konstansokat leszámítva (az is csak kényelmi szolgáltatás, hogy ne karakterenként kelljen inicializálni a tömböket). Az összes mûvelet a c libraryban van. Az említett összefûzés pedig különösen problémás, hiszen az új stringnek helyett kell foglalni. Minthogy dinamikus memóriakezelés sincs (ez is a lib dolga) így ezt nem lehet megcsinálni. Ez így jó is, mert a lib cserélgetésével tetszõleges környezetben használható marad a nyelv. Enélkül bajos lenne pl. a kernelt C-ben írni.
MOD: ja és még egy dolog: mivel a C nem rejti el a részleteket a programozó már kb. ránézésre tudja, mi zajlik. Észreveszed, hogy az a string összefûzés egy bonyolult dolog lehet tehát esetleg át kellene írni olyanra a kódot, hogy kevesebbre legyen szükség (ha éppen számít a sebesség).
[Szerkesztve] -
Forest_roby
őstag
okay sracok, értem és használom is a fv.-t. Eszembe nem jutott irni egy ujat, ha itt van ez amit lehet hasznalni (biztos jobban megirtak, mint amire en kepes lennek). Az egeszet azert kerdeztem meg, mert fura volt hogy ez ilyen bonyolult -persze ez velemeny kerdese. Szeretem en a c -nyelvet, meg ebben tudok a legjobban programozni es tenyleg nagyon jo, de a stringek kezelesevel az igazat megvalva nem vagyok megelegedve ( es nem en vagyok az egyetlen ). Mar a glib iroi is eszre vettek ezt, gondolom ezert az a SOK uj fv stringekre. Legtipikusabb!: ''szoveg01'' + ''szoveg02'' nem értelmes. Saját vélemény, de ezt szerintem mindenki olyan termeszetesnek gondolna, hogy ez mukodik, pedig nem : | . No mindegy, megprobalok kibekulni ezzel a dologgal es bocs -nem akartam vitat. ( az elejen tenyleg azt hittem, hogy van egyszerubb megoldas. )
-
sziasztok! tudtok valami jó textpad szerű c++ fejlesztői progit ami ingyenes ajánlani? olyat amibe be lehet állítani rendesen a compliert és hogy merre van! köszi!
-
Jester01
veterán
persze elotte megnezi, hogy egyenlo-e a hosszuk
... ami annyira nem persze, mivel c-ben nem éri meg 2x végignézni a stringet szerintem.
MOD: meg a glibc írói szerint sem
__STRING_INLINE int
strcmp (__const char *__s1, __const char *__s2)
{
register unsigned long int __d0, __d1;
register int __res;
__asm__ __volatile__
(''cld\n''
''1:\n\t''
''lodsb\n\t''
''scasb\n\t''
''jne 2f\n\t''
''testb %%al,%%al\n\t''
''jne 1b\n\t''
''xorl %%eax,%%eax\n\t''
''jmp 3f\n''
''2:\n\t''
''sbbl %%eax,%%eax\n\t''
''orb $1,%%al\n''
''3:''
: ''=a'' (__res), ''=&S'' (__d0), ''=&D'' (__d1)
: ''1'' (__s1), ''2'' (__s2)
: ''cc'');
return __res;
}
[Szerkesztve] -
shev7
veterán
válasz
Forest_roby #2118 üzenetére
pedig ez a fv is kb azt csinalja amit te csinalnal. Osszehasonlitja karakterenkent a ket stringet. (persze elotte megnezi, hogy egyenlo-e a hosszuk)
-
bdav
őstag
válasz
Forest_roby #2118 üzenetére
használd csak nyugodtan, ha direkt nem kötötték ki hogy nem lehet, télleg azért rakták bele
ha nagyon nem akarsz akkor kb. 4 sorban lehet írni sajátot, nem bonyolult annyira.
-
Forest_roby
őstag
Jester01, Robaj!
vhogy bonyolultnak tunt egy ( 'komolyabb' ) fv. -t hasznalni 2 szo osszehasonlitasara. -
jé most sikerült
-
Robaj
addikt
válasz
Forest_roby #2113 üzenetére
Kérdés: akkor miért írtak volna strcmp fgv-t?
Ha nem tetszik írj sajátot
[Szerkesztve] -
sziasztok!
a visual c++ express jó valamire? felraktam neki a p sdk is ahogy kérte de nem megy. amit a dev c simán fordít ez nem... -
Jester01
veterán
válasz
Forest_roby #2113 üzenetére
Egy megoldás lehetne az, hogy strcmp -vel összehasonlítom, de nem akarok ágyúval lőni verébre.
Erre pedig ez a megoldás. -
Forest_roby
őstag
Hi!
Végülis egyszerű kérdés, csak vhogy nem jövök rá az egyszerű megoldásra....
Adott egy string-re mutató pointer: gchar* valtozonev;.
Ennek a pointernek a tartalmát szeretném összehasonlítani egy tényleges szöveggel egy if -ben -ha megegyezik akkor vmi, egyébként vmi más.
vmi ilyesmi:
if( valtozonev == ''szöveg szöveg'' )
/*-*/g_message(''-=megegyezik=-'');
.....//nem egyezik meg ág!
persze ez nem jó, de nem tudom, hogy lehetne megcsinálni jól és szépen!
Egy megoldás lehetne az, hogy strcmp -vel összehasonlítom, de nem akarok ágyúval lőni verébre.
Van más egyszerűbb/szebb megoldás?
Előre is köszi a válaszokat! -
Tottu
senior tag
Sikerült mindegyik problémát megoldani kaptam is 2 pontot rá a 10ből!
A lényeg: ugye max 100 számjegyű lehet a (előjeles) szám és egy fileból kell beolvasni. Előszőr is a file beolvasás utána át kellett konvertálni a karakter számmá hogy számolni tudjak vele. Ezt követően beállítottam a szám előjelét (tömb 0. indexéhez írtam egy ' + ' vagy ' - '). Jött a jombra igazítás (ez lehet fölösleges volt tényleg, mert az említet strlen () függvénnyel meglehetett volna oldani, de én a ''papíros'' módszernél maradtam. Azaz jobbra kell igazítani a számokat és úgy összeadni ill. kivonni egymásból). Ha a rendezés előjel meg van jött a művelet eldöntése amit lehet variálni rendedessen (szam1 pl.: - ; szam2: - ; és a művlet is - akkor összeadás kell, és az eredménynél is történhet előjel változás, amikor a szam1 kisebb mint a szam2, stb...) -
Pho3bus
tag
hello megint!!nah eldöntöttem!!saeel oldom meg a problémám!!viszont itt egy újjab kérdés!!case ágon belül hogyan lehet megoldani azt,h if utasitással megadom pl if(x>40 && x<50)akkor a case 4 ben előre megfogalmazott értékhez dobjon hozzá egy ''ven'' szót,tehát csae 4ben megvan fogalmazva a negy akkor ahhoz ha a szam kiseeb mint50 akkor adja hozzá a vent!!
[Szerkesztve] -
shev7
veterán
nem tudom mit akarsz a tombon rendezni, de ha az algoritmusod mukodne a tombon az egyik iranyban, akkor a megfelelo indexeles megvalasztasaval mennie kene a masik iranyban is.
pl ha valami ilyesmi for ciklusod van: for (i=0;i<hossz;i++)
es gondolom megy sorba tomb-n.
Akkor ket lehetoseg is van
for (i=hossz-1;i>=0;i--)
vagy a tomb helyett tomb[hossz-1-i]-t hasznalsz.
De egyebkent a tomb sorrendjet felcserelni sem nagy dolog
For (i = 0;i<hossz / 2;i++) {
x = c
c = c[hossz - 1 - i]
c[hossz - 1 - i] = x
} -
bdav
őstag
ha charként olvasod be akkor ha azt látod a fájlban hogy '2' akkor nem 2 fog bekerülni hanem a '2' mint karakter kódja, ezért az eltérés, ezen nem tudsz segíteni. A jobbra igazításhoz pedig vagy megszámolod hogy milyen hosszú a számod, vagy pedig megfordítva írod bele a tömbbe (tomb [0 ] lesz a legkisebb helyiértéked)
gabesz: kicsit konkrétabban miről lenne szó?
[Szerkesztve] -
gabesz82
őstag
Sziasztok!
JAVA-ban kellene nekem segíteni. Természetesen nem ingyen. Aki keni-vágja írhat egy privit vagy mailt. Köszi Ja és sürgős lenne -
Tottu
senior tag
Kellene még egy kis segítség:
Ez van a be.txt file-ban:
23
+
6
Nah és most, a sorokat beolvasom az fgets egyesével 1-1 tömb-be. Eldöntöm, hogy milyen műveletet is kell majd elvégezni. Ezután jönnek a gondok, mert a tomb az char típusú és így nem kapok valós eredményt. Próbáltam már típus kényszerítéssel is:
eredmeny=(char)eredmeny+(char)uj_szam; (DE így sem lett jó)
Másik gond ami felmerült: az fgets a tomb-be 0-tól kezdi feltölteni a tömb-t, de ahoz hogy összetudjam adni vagy kitudjam vonni a számokat ahoz jobbra kellene igazítani, és így a a tömb legnagyobb indexétől kellene feltölteni. Erre nincs vmi ötletetek?
Új hozzászólás Aktív témák
Hirdetés
● olvasd el a téma összefoglalót!
- PlayStation 1 / 2
- Milyen egeret válasszak?
- Milyen billentyűzetet vegyek?
- Kerékpárosok, bringások ide!
- Vigneau interaktív lokálblogja
- Azonnali VGA-s kérdések órája
- Audi, Cupra, Seat, Skoda, Volkswagen topik
- Parkside szerszám kibeszélő
- Elektromos autók - motorok
- CASIO órák kedvelők topicja!
- További aktív témák...
- Eredeti Lenovo 300W töltők - ADL300SDC3A
- BESZÁMÍTÁS! Gigabyte B365M i5 8500 16GB DDR4 512GB SSD GTX 1060 3GB Rampage SHIVA FSP 400W
- LG 65" C1 OLED - 4K 120Hz 1ms - NVIDIA G-Sync - FreeSync Premium - HDMI 2.1 - PS5 és Xbox Ready!
- Bomba ár! Dell Latitude E6400 - Intel P8400 I 3GB I 160GB I 14,1" I Intel VGA I Garancia!
- LG 27UL550-W - 27" IPS / 3840x2160 4K / 60Hz 5ms / HDR10 / AMD FreeSync
Állásajánlatok
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest