Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- PROVA DI FONDAMENTI DI PROGRAMMAZIONE
- *
- * NOME:
- * MATRICOLA:
- * DOCENTE:
- *
- *
- * Si definisce una matrice "frame" (cornice), quella matrice che ha uguali
- * tutti gli elementi della prima e ultima riga e della prima e ultima colonna.
- * Inoltre i restanti elementi devono essere diversi dall'elemento individuato
- * nella cornice della matrice.
- *
- * Scrivere un programma C che letta da file una sequenza di interi,
- * costruisca la matrice associata.
- * Nel file viene fornita solo la seconda dimensione (num_colonne) e a seguire gli interi.
- * Ricavare la prima dimensione (num_righe) e poi salvare tale matrice in un file.
- * Inoltre verificare se la matrice è una matrice FRAME e inserire tale informazione nel file.
- *
- *
- *
- * Un esempio di file di input e' il seguente:
- 4 7 7 7 7 7 5 6 7 7 1 2 7 7 0 5 7 7 7 7 7
- Un esempio di esecuzione e':
- Digitare il nome del file contenente la matrice A: frame.txt
- 7 7 7 7
- 7 5 6 7
- 7 1 2 7
- 7 0 5 7
- 7 7 7 7
- Matrice FRAME
- */
- /*
- * File: main.c
- * Author: sab
- *
- * Created on 17 luglio 2018, 16.28
- */
- #include <stdio.h>
- #include <stdlib.h>
- #define MAX 16
- #define MAX_STR_LEN 64
- FILE * my_fopen(char *);
- void get_array(int [MAX][MAX], int *, int *);
- int check_array(int [][MAX], int, int);
- void put_array(int [][MAX], int, int, int);
- main(){
- int array[MAX][MAX], a=0, b, is_frame;
- get_array(array, &a, &b);
- is_frame=check_array(array, a, b);
- put_array(array, a, b, is_frame);
- return 0;
- }
- FILE * my_fopen(char * mode){
- FILE * fp;
- char filename[MAX_STR_LEN];
- printf("Insert %s file name: ", (mode[0]=='r')?("input"):("output"));
- scanf("%s", filename);
- if((fp=fopen(filename, mode))==NULL)
- abort();
- return fp;
- }
- void get_array(int array[MAX][MAX], int * r, int * c){
- int i, j, temp;
- FILE * fp=my_fopen("r");
- fscanf(fp, "%d", c);
- while(feof(fp)==0)
- if(1==fscanf(fp, "%d", &temp))
- ++*r;
- *r/=*c;
- rewind(fp);
- fscanf(fp, "%d", &temp);
- for(i=0;i<*r;i++)
- for(j=0;j<*c;j++)
- fscanf(fp, "%d", &array[i][j]);
- fclose(fp);
- }
- int check_array(int array[][MAX], int r, int c){
- int i, j;
- for(j=0;j<c;j++){
- if(array[0][j]!=array[0][0])
- return 0;
- if(array[r-1][j]!=array[0][0])
- return 0;
- }
- for(j=0;j<r;j++){
- if(array[j][0]!=array[0][0])
- return 0;
- if(array[j][c-1]!=array[0][0])
- return 0;
- }
- for(i=1;i<r-1;i++)
- for(j=1;j<c-1;j++)
- if(array[i][j]==array[0][0])
- return 0;
- return 1;
- }
- void put_array(int array[][MAX], int r, int c, int flag){
- int i, j;
- FILE * fp=my_fopen("w");
- for(i=0;i<r;i++)
- for(j=0;j<c;j++)
- fprintf(fp, "%d%c", array[i][j], (j==c-1)?('\n'):('\t'));
- fprintf(fp, "Matrix is %sframe", (flag==0)?("not "):(""));
- fclose(fp);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement