• Non ci sono risultati.

Programmazione 1 – Verifica collocazione matrice

N/A
N/A
Protected

Academic year: 2021

Condividi "Programmazione 1 – Verifica collocazione matrice"

Copied!
1
0
0

Testo completo

(1)

Programmazione 1 – Verifica collocazione matrice

Generare in modo casuale una matrice binaria A di ordine n x m e una matrice analoga B di dimensioni inferiori. Verificare se in A sia possibile collocare B in modo tale che nessun elemento di valore 1 di B si vada a sovrapporre ad un elemento di valore 1 in A. In caso affermativo stampare le coordinate di riga e di colonna in A in cui può essere collocato l'elemento B[0] [0].

IMPORTANTE: organizzare il programma in funzioni, non utilizzare array ausiliari, non introdurre variabili globali.

Esempio. Supponiamo che vengano generate le seguenti matrici A (5 x 8) e B (3 x 4):

0 1 2 3 4 5 6 7

0 1 1 1 0 0 0 0 0 0 1 1 0

0 1 0 1 1 0 0 0 1 1 1 0 0

1 0 0 1 0 0 0 1 2 0 0 0 1

0 0 1 0 0 1 1 0 3 1 1 0 0 1 1 0 1 4

La matrice B può essere collocata in A a partire dalla posizione di indici (2, 3).

(2)

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

void genera(int M[][20], int n, int m);

int verifica(int A[][20], int B[][20], int na, int ma, int nb, int mb, int *x, int *y);

void printmatrice(int M[][20], int n, int m);

main() {

int A[20][20], B[20][20], na, ma, nb, mb, x, y;

printf ("digita le dimensioni della matrice A: ");

scanf ("%d%d", &na, &ma);

genera(A, na, ma);

printmatrice(A, na, ma);

printf ("\n\ndigita le dimensioni della matrice B: ");

scanf ("%d%d", &nb, &mb);

genera(B, nb, mb);

printmatrice(B, nb, mb);

if (verifica(A, B, na, ma, nb, mb, &x, &y)) {

printf("\n\nla matrice B si incastra in A collocandola");

printf(" a partire dagli indici (%d,%d)\n", x, y);

} else {

printf("\n\nla matrice B non si incastra nella matrice A\n");

}

printf ("\n\n");

system ("pause");

return(0); }

(3)

void genera(int M[][20], int n, int m) { int i, j;

srand(time(NULL));

for (i=0; i<n; i++) { for (j=0; j<m; j++) { M[i][j] = rand()%2;

} }

return;

}

int verifica(int A[][20], int B[][20], int na, int ma, int nb, int mb, int *x, int *y)

{

int i, j, h, k, flag;

flag = 0;

for (i=0; i<na -(nb - 1) && flag==0; i++) {

for (j=0; j<ma - (mb - 1) && flag==0; j++) { flag = 1;

for (h=0; h<nb && flag==1; h++)

for (k=0; k<mb && flag==1; k++)

if (B[h][k] == 1 && A[i+h][j+k] == 1)

flag = 0;

} }

if (flag) { *x = i-1;

*y = j-1;

}

return(flag);

}

void printmatrice(int M[][20], int n, int m) { int i, j;

for (i=0; i<n; i++) { for (j=0; j<m; j++)

printf("%d ", M[i][j]);

printf("\n");

}

return; }

Riferimenti

Documenti correlati

Nel caso in cui invece M sia invertibile, si calcoli la matrice inversa M

il che corrisponde a risolvere il sistema lineare che ha per matrice dei coefficienti la matrice A 0 considerata in precedenza e per colonna dei termini noti il vettore colonna (3,

4.Se si moltiplicano gli elementi di una riga (o colonna )per uno scalare anche il determinante risulta moltiplicato per lo

Telefoni, tablet, smartwatch, etc.... devono

Si dimostri che se la funzione f ha un flesso nella radice ¯ x, allora il metodo di Newton converge (localmente) con ordine almeno

Sia M R (2) lo spazio vettoriale delle matrici reali quadrate di ordine 2... Scrivere il polinomio caratteristico

Determinare la dimensione della variet` a delle soluzioni e una... Determinare la dimensione della variet` a delle soluzioni

[r]