th1sk |
|
| Ecco: CODICE // Grazie #(dd) <3 #define MEMZERO(address, size) int i__ = 0; for (i__ = 0; i__ < size; i__++) *(address + i__) = 0;
// Larghezza e lunghezza massima della matrice #define MAXX 100 #define MAXY 100
#include <stdio.h> #include <stdlib.h>
// matrice_t è il tipo di tutti gli elementi della matrice (ed il puntatore) typedef short matrice_t; // matrice_st invece è per indicare la dimensione massima della matrice e le coordinate typedef short matrice_st;
// Prototipi delle funzioni matrice_t randomNumber(matrice_st); void risolviMatrice(matrice_t*, matrice_st, matrice_st); void mostraMatrice(matrice_t*, matrice_st, matrice_st);
int main(int argc, char *argv[]) { // Il puntatore al primo elemento della matrice matrice_t *matrice;
// Larghezza e lunghezza matrice_st lx, ly;
srand(time(NULL));
// Chiedo larghezza e lunghezza della matrice
printf("Larghezza matrice: "); scanf("%i", &lx); printf("Lunghezza matrice: "); scanf("%i", &ly);
// Controllo se sono numeri validi
if ((lx < 2 || lx > MAXX) || (ly < 2 || ly > MAXY)) { printf("Min. 2x2, Max. %ix%i\n",MAXX,MAXY); return 1; }
// Alloco la memoria per la matrice
matrice = (matrice_t*) malloc((lx*ly) * sizeof(int));
if (matrice == NULL) { printf("Errore nell'allocare la memoria!"); return 1; }
// Come memset, però più 'manuale' MEMZERO(matrice, (lx*ly));
printf("\nAppena il limite massimo della matrice sarà superato\nil programma si chiuderà mostrandoti ogni singolo valore.\n\n");
risolviMatrice(matrice, lx, ly);
printf("\nEcco i valori:\n");
mostraMatrice(matrice, lx, ly);
// Libero la memoria free(matrice);
return 0; }
void risolviMatrice(matrice_t *matrice, matrice_st lx, matrice_st ly) { matrice_st x, y, i, j; matrice_t *p;
x = 0; y = 0;
// P punta al primo elemento della matrice p = matrice;
while ((x < lx) && (y < ly)) { printf("Coordinate attuali: (%i;%i)\n", x, y);
// Sposto il puntatore di i in basso // ed j a destra i = randomNumber(ly); j = randomNumber(lx);
y += i; x += j;
// Se hanno superato i bordi della tabella // Esci dal loop if(x > lx) continue; if(y > ly) continue;
// Altrimenti aumenta il valore dell'elemento di 1 p = matrice; p += (y*lx) + x; (*p)++; } }
void mostraMatrice(matrice_t *matrice, matrice_st lx, matrice_st ly) { matrice_st y, x; matrice_t *p;
p = matrice;
// Mostro tutti gli elementi della matrice for (y = 0; y < ly; y++) { for(x = 0; x < lx; x++) { // Do il valore e faccio puntare // Al numero dopo printf("%i", *(p++)); } printf("\n"); } }
matrice_st randomNumber(matrice_st max) { return (matrice_st) (((float) max) * rand() / RAND_MAX); } Pastebin: http://pastebin.com/ZwnbEVYV
|
| |