Új hozzászólás Aktív témák
-
WonderCSabo
félisten
Válaszoltam a C++ topikban, de itt folytassuk.
-
WonderCSabo
félisten
Megírtam egy picit más megközelítéssel. Nem lehet, hogy a mainben rossz vmi? Én most már fáradt vagyok elemezni ezt a bonyolult problémát.
int vizsgal(char s1[], char d1[])
{
int i, j;
int b = 1;
for(i = 0; i<= strlen(s1)-strlen(d1); ++i)
{
for(j=0; j < strlen(d1); ++j)
{
if(s1[i+j-1] != d1[j])
{
b = 0;
break;
}
else
b = 1;
}
if(b)
return i-1;
}
return i-1;
} -
Jester01
veterán
Ez nagyon kreatívan megírt program. Ha ember bírálná el, nem sok jó származna belőle.
Mindenesetre a baj az fgets körül lehet, az ugyanis eltárolja a sorvég jelet is. Ezáltal egyfelől csak akkor találod meg a dolgokat ha az éppen a sor végén van, másfelől pedig a 255 hosszú sorokon elcsúszik a feldolgozás (és onnan már nem is jön helyre). Jelen formájában a feladatkiírásban lévő példára sem működik, nem értem ezt hogy nem vetted észre.
Jester
-
addikt
Becopyznád a jelenlegi teljes programodat?
Mert en most megneztem az eredeti kododdal, meg a javitasokkal is, de mar a linkelt pdf-ben szereplo peldat hasznalva is helytelen eredmenyt ad...
Meg milyen kornyezetben probaltad te ezt?
En egy kabinetes gepen futtattam s ott adott vissza rosszat s ugye a Biro is ugyanilyen kornyezetben futtattja majd.Szerk: Latom Jester01 megelozott.
[ Szerkesztve ]
-
Jester01
veterán
Ezzel több baj is van.
Ha egyáltalán nem működik az azért lehet mert nem jó a bemenet. Ha tényleg "45+15" akkor azt egyben megeszi az első scanf. Kell közéjük valami elválasztó whitespace, például "45 + 15". Ezután az lesz a következő baj, hogy simán az ascii kódot nem lehet összeadni, le kell vonni belőle 0 ascii kódját. Ha ez is megvan akkor még az átvitel (carry) problémáját is meg kell oldani. Az eredmény hosszával is gondok vannak, te egyszerűen az első szám hosszát használod ami nem (mindig) jó.[ Szerkesztve ]
Jester
-
kingabo
őstag
osszeg[a-i]=s1[a-i]+s2[b-i];, ha jól sejtem itt a számok ASCII kódját adod össze, ezért van gond a kiíratással. Megoldás: a beolvasásban ne stringként olvas be, hanem számként. Hiba még, hogy pl 8+9 esetén a "túlcsordulást" nem viszed tovább.
Szerintem ha megosztod a feladatot lehet, hogy a mostani elképzelésednél könnyebbet tudnánk kitalálni.szerk: lemaradtam. Ja és igen a szám hossz...
[ Szerkesztve ]
-
kingabo
őstag
Huh, 1000 éve nem olvastam file-ból c-ben. , talán a legegyszerűbb az lenne, ha írnál egy fv-t ami az ascii-ben tárolt számot átalakítja, annak a valódi értékére. Ehhez a 0 vagy az 1 (nemtom melyik van elől) ascii kódját kellene minden számjegynél levonni.
"átvitelnél a túlcsordulásra gondolsz?"
Igen.Feladat: sztem jó az irány, az előjelezést meg nem olyan nehéz megoldani.
-
kingabo
őstag
Nos, mivel stringként olvasol be a file-ból, ezért a tömb elemek nem a számokat, hanem azok ascii kódját tartalmazzák. Pl a 0 helyett 48-at. Tehát ha a szám kellene, nem a kódja, akkor minden karakterből le kell vonni 48-at. s1[i] -= 48; (lehet van szebb megoldás is, de most nem jut eszembe.
ui: 5 percig tudod szerkeszteni a hsz-ed.
szerk: az atoi pont erre való.
[ Szerkesztve ]
-
kingabo
őstag
Vegyük a következő esetet: s1[a-0] = 9, s2[b-0] = 8, ekkor osszeg[a-0]=s1[a-0]+s2[b-0]+g; az osszeg[a] helyére 17-et ír, nem pedig 7-et. Nálad a tizesek helyén van a 4 az egyesek helyén a 11, ezért lett 411.(ha teszel egy szóközt a jegyek kiíratása közé, úgy könnyebb észrevenni) Megoldás: az osszeg[a-.. jobb oldalának vedd a 10-el vett maradékát.
[ Szerkesztve ]
-
vanek
tag
Meg is érkeztem..
a problémám a következő lenne,
az eredményt az s1 be szeretném beletenni, mivel majd egy while ciklussal addig kell összeadogatnom a számokat, amíg nem lesz a műveleti jel '='for(c=0; c<=a; c++)
{
osszeg[a-c]=((s1[a-c]-s2[b-c])+10)%10-g;
if((s1[a-c]-s2[b-c])+s2[b-c]<0)
{
g=1;
}else{
g=0;
}
}ha jól sejtem, akkor az if részben már a két szám eredményeképpen kapott számból vonja ki az aktuális s2-t, de miért nem jó, ha még hozzáadom az s2-őt? Akkor az eredeti számot kapom nem?:\ de még sem akar működni..
ugyan ilyen gondom van az összeadásnál is..
-
Jester01
veterán
Valószínűleg nem nullázod az átvitelt a kivonás előtt. Nekem működik.
Jester
Ú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!
Állásajánlatok
Cég: Ozeki Kft.
Város: Debrecen
Cég: Alpha Laptopszerviz Kft.
Város: Pécs