|
[ zaxa321 @ 12.03.2008. 23:44 ] @
| molim brz odgovor! dakle u kratkim crtama problem je ovakav...
ovo radi:
in>>n;
in>>a[1];
out<<a[1]<<" ";
in>>a[2];
out<<a[1]<<" ";
in>>a[3];
out<<a[1]<<" ";
in>>a[4];
out<<a[1]<<" ";
ovo je ulaz:
8
ANJBCDSP
CBNIOKIA
JKDCOOQO
RTICIFQE
a ovo izlaz:
ANJBCDSP ANJBCBNIOKIA ANJBCBNIJKDCOOQO ANJBCBNIJKDCRTICIFQE
jel ovo kakav bug il u cemu je problem? inace koristim Dev-C++, source file... |
[ butcher87 @ 13.03.2008. 00:51 ] @
Mnogo bi znacilo ako bi prilozio celi kod.
[ zaxa321 @ 13.03.2008. 05:56 ] @
ok, sve u sluzbi nauke. izvolte. kao sto mozete primetiti radi samo raj mali deo u mainu, ovaj drugi sam izovlovaqo komentarima, jer sam, posle muke pregoleme s radom, primetio da mi krivo prihvata unos...
Code: #include"stdio.h"
#include"fstream.h"
#include"string.h"
ifstream in("zad3.dat");
ofstream out("zad3.res");
int n,i,h,pocetak[4],kraj,j,l,o;
char a[20][4],q[20];
void promena()
{
if(++h>5)
return;
else
{
if(h%2==0)
{
strcpy(q,a[3]);
strcpy(a[3],a[4]);
strcpy(a[4],q);
}
else
{
strcpy(q,a[2]);
strcpy(a[2],a[3]);
strcpy(a[3],q);
}
pocetak[2]=0;
pocetak[3]=0;
int rad(1);
}
}
void rad2()
{
l=kraj-pocetak[2];
for(i=pocetak[3]+1;i<n-1;i++)
for(j=1;j<n-1-l;j++)
if((a[i][1]==a[j][4])&&(a[i][3]==a[j+l][4])&&((kraj-pocetak[2]-1)*(i-pocetak[3]-1)>o))
o=(kraj-pocetak[2]-1)*(i-pocetak[3]-1);
int rad(1);
}
void rad(int k)
{
if(k<3)
{
for(i=pocetak[k]+1;i<n-1;i++)
for(j=pocetak[k+1]+1;j<n-1;j++)
if(a[i][k]==a[j][k+1])
{
pocetak[k+1]=j;
if(k==2)
kraj=i;
rad(k+1);
}
}
else
rad2();
promena();
}
main()
{
in>>n;
in>>a[1];
out<<a[1]<<" ";
in>>a[2];
out<<a[1]<<" ";
in>>a[3];
out<<a[1]<<" ";
in>>a[4];
out<<a[1]<<" ";
/*rad(1);
out<<o;*/
}
[ IgorDX @ 13.03.2008. 09:54 ] @
Ovo: char a[20][4],q[20];
20 komada po 4 bajta pa se guraju jedan do drugog. Ili prosiri 20x20 ili zamijeni u 4x20.
Igor
[ zaxa321 @ 13.03.2008. 12:53 ] @
izvinte ja sam poprilicno nov sto se tice programiranja, al moze li se to objasniti malo prostije? stavio sam 20x20 i ok je, samo jednu stvar da pitam.
kad napisem a[20][4] jesam napravio 4 stringa koji imaju 20 charova u sebi max, ili 20 stringova po 4? i kako je on uspeo da napravi onakve kerefeke od onog unosa?
[ butcher87 @ 13.03.2008. 14:17 ] @
Kad se napise char a[20][4] napravio si niz od 20 stringova i svaki po 4 karaktera, s tim sto ces moci da cuvas reci od 3 karaktera. Zasto? Ako hoces da jedan string "cuva" rec kocka, u stringu ce to izgledati ovako: {'k','o','c','k','a','\0'}. Znaci, kada string cuva rec od npr. 6 slova, string mora najmanje biti duzine 7, zbog poslednjeg znaka '\0' koji oznacava kraj reci u stringu. U tvom slucaju, treba da napises char a[4][20]; .
[ butcher87 @ 13.03.2008. 14:19 ] @
Kad se napise char a[20][4] napravio si niz od 20 stringova i svaki po 4 karaktera. Zasto? Ako hoces da jedan string "cuva" rec kocka, u stringu ce to izgledati ovako: {'k','o','c','k','a','\0'}. Znaci, kada string cuva rec od npr. 6 slova, string mora najmanje biti duzine 7, zbog poslednjeg znaka '\0' koji oznacava kraj reci u stringu. U tvom slucaju, treba da napises char a[4][20]; .
[ IgorDX @ 13.03.2008. 20:23 ] @
I meni je to nekad znao biti problem ali si uvijek zaislim sto pisem ako mi treba jedan znak i sto ako mi treba cijeli string?
Ovako - kad je nesto deklarirano kao:
char mojstr[256];
onda je kod upotrebe mojstr[0] jedan karakter a kad maknem index, onda je mojstr cijeli taj string.
A kad je deklarirano ovako:
char mojniz[4][256];
onda je kasnije mojniz[2][0] jedan karakter a kad maknes index [0], ono sto ostane je mojniz[2] a to je cijeli taj string.
Nadam se da je ovo bilo korisno.
Igor
[ zaxa321 @ 13.03.2008. 21:43 ] @
da, shvatio sam... problem je bio jer sam ja mislio da su brojevi do promenljive broj karaktera stringa, a kasnije dimenzije, a ono zadnji je broj karaktera stringa.
al mozete li mi nekako objasniti kako se uspela napraviti ta zajebancija? kako je bacano na jedan prva 4 sto sam bacao u druge i zadnji?
[ IgorDX @ 14.03.2008. 00:55 ] @
> al mozete li mi nekako objasniti kako se uspela napraviti ta za***ancija?
Overflow - ako se ne varam tako se to zove. Ako definiras varijablu da je dugacka 4 bajta a onda na tu adresu posaljes 5 ili vise bajtova podataka u Cu ne postoji nista da to sprijeci, visak se prelije u susjedstvo. (OK, ako stvarno pretjeras, MMU unit u procesoru daje page fault i OS ubije tvoj proces).
Probaj ovo:
Code: char a[4], b[4], c[4];
a[0] = b[0] = c[0] = '\0';
strcpy (b, "Zdravo");
printf ("a:%s, b:%s, c:%s", a, b, c);
Igor
[ zaxa321 @ 14.03.2008. 08:39 ] @
aha, e sad savrseno razumem! fala Igore, car si :)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|