Este și asta o obțiune, dar nu și răspunsul corect.
Ceea ce nu observi tu poate fi redus la :
- int v[2][2] = {{1,2}, /* accesibile prin v[0][0] și v[0][1]*/
- {3,4}}; /* accesibile prin v[1][0] și v[1][1] */
- int y,x;
-
- /* modificăm elementele din vector (din bază 0) */
- for(y = 0; y < 2; ++y)
- for(x = 0; x < 2; ++x)
- v[y][x] = 2;
- /* => v[0][0] = v[0][1] = v[1][0] = v[1][1] = 2 */
-
- /* afișăm de la index 1 */
- for(y = 1; y <= 2; ++y)
- for(x = 1; x <= 2; ++x)
- printf("%d ", v[y][x]);
- /* se va afișa: v[1][1] v[1][2] v[2][1] v[2][2], dar în afară de v[1][1], nu există celelalte elemente : v[1][2] v[2][1] v[2][2] și, deci, se va afișa valori aleatoare pe secvența respectivă */
-
Cel mai corect este să fii consecvent în indexare. Dacă începi de la 1, toată aplicația va accesa elementele de la 1, iar dacă începi de la 0, o ții pe 0. Eu te sfătuiesc să începi de la 0 pentru că altfel, compilatorul tot îți alocă elementele de index [0], chiar dacă tu le folosești doar de la index 1 de unde rezultă o regiune de memorie inutil alocată.
Încearcă să aplici asta în aplicația ta. Să vedem ce obții.
P.S: Pentru comparație, aici este codul folosit pentru a-ți deduce indexii :
- #include <stdio.h>
- #include <stdlib.h>
-
- int
- main(int argc, char *argv[])
- {
-
- if(argc != 2)
- {
- printf("Mod de folosire : nume_aplicatie <valoare_pentru_n>\n");
- return 0;
- }
-
- int dim = atoi(argv[1]);
- int mat[dim][dim];
- int y,x;
-
- for(y=0;y<dim;++y)
- {
- for(x=0;x<dim;++x)
- if(x == y) mat[y][x] = 0;
- else if(x > y && x < dim - y - 1) mat[y][x] = 1;
- else if(x < y && x > dim - y - 1) mat[y][x] = 3;
- else mat[y][x] = 2;
- mat[y][dim - y - 1] = 0;
- }
-
- for(y=0;y<dim;++y)
- {
- for(x=0;x<dim;++x)
- printf("%-2d ", mat[y][x]);
- printf("\n");
- }
-
- return 0;
- }
Urmărește-o, încearcă să o înțelegi și dacă nu reușești, întreabă.
Spor
-- 08 Jan 2012, 21:35 --
Felicitări! Da, te rog!
"Rațiunea vine în umbre scurte numite suferințe."
Victor Adăscăliței"
Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..."
Futurama S06E06