Advertisement
Mazamin

Frame not frame

Jan 20th, 2019
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.98 KB | None | 0 0
  1. /*
  2.  PROVA DI FONDAMENTI DI PROGRAMMAZIONE
  3.  *
  4.  * NOME:
  5.  * MATRICOLA:
  6.  * DOCENTE:
  7.  *
  8.  *
  9.  * Si definisce una matrice "frame" (cornice), quella matrice che ha uguali
  10.  * tutti gli elementi della prima e ultima riga e della prima e ultima colonna.
  11.  * Inoltre i restanti elementi devono essere diversi dall'elemento individuato
  12.  * nella cornice della matrice.
  13.  *
  14.  * Scrivere un programma C che letta da file una sequenza di interi,
  15.  * costruisca la matrice associata.
  16.  * Nel file viene fornita solo la seconda dimensione (num_colonne) e a seguire gli interi.
  17.  * Ricavare la prima dimensione (num_righe) e poi salvare tale matrice in un file.
  18.  * Inoltre verificare se la matrice è una matrice FRAME e inserire tale informazione nel file.
  19.  *
  20.  *
  21.  *
  22.  * Un esempio di file di input e' il seguente:
  23.  
  24.   4 7  7  7  7  7  5  6   7  7  1  2  7  7  0  5  7  7  7  7  7
  25.  
  26.  Un esempio di esecuzione e':
  27.  
  28.  Digitare il nome del file contenente la matrice A: frame.txt
  29.  
  30.  7 7 7 7
  31.  7 5 6 7
  32.  7 1 2 7
  33.  7 0 5 7
  34.  7 7 7 7
  35.  Matrice FRAME
  36.  
  37.  
  38.  
  39.  */
  40.  
  41.  
  42. /*
  43.  * File:   main.c
  44.  * Author: sab
  45.  *
  46.  * Created on 17 luglio 2018, 16.28
  47.  */
  48.  
  49. #include <stdio.h>
  50. #include <stdlib.h>
  51. #define MAX 16
  52. #define MAX_STR_LEN 64
  53.  
  54. FILE * my_fopen(char *);
  55. void get_array(int [MAX][MAX], int *, int *);
  56. int check_array(int [][MAX], int, int);
  57. void put_array(int [][MAX], int, int, int);
  58.  
  59. main(){
  60.     int array[MAX][MAX], a=0, b, is_frame;
  61.     get_array(array, &a, &b);
  62.     is_frame=check_array(array, a, b);
  63.     put_array(array, a, b, is_frame);
  64.     return 0;
  65. }
  66.  
  67. FILE * my_fopen(char * mode){
  68.     FILE * fp;
  69.     char filename[MAX_STR_LEN];
  70.     printf("Insert %s file name: ", (mode[0]=='r')?("input"):("output"));
  71.     scanf("%s", filename);
  72.     if((fp=fopen(filename, mode))==NULL)
  73.         abort();
  74.     return fp;
  75. }
  76.  
  77. void get_array(int array[MAX][MAX], int * r, int * c){
  78.     int i, j, temp;
  79.     FILE * fp=my_fopen("r");
  80.     fscanf(fp, "%d", c);
  81.     while(feof(fp)==0)
  82.         if(1==fscanf(fp, "%d", &temp))
  83.             ++*r;
  84.     *r/=*c;
  85.     rewind(fp);
  86.     fscanf(fp, "%d", &temp);
  87.     for(i=0;i<*r;i++)
  88.         for(j=0;j<*c;j++)
  89.             fscanf(fp, "%d", &array[i][j]);
  90.     fclose(fp);
  91. }
  92.  
  93. int check_array(int array[][MAX], int r, int c){
  94.     int i, j;
  95.     for(j=0;j<c;j++){
  96.         if(array[0][j]!=array[0][0])
  97.             return 0;
  98.         if(array[r-1][j]!=array[0][0])
  99.             return 0;
  100.     }
  101.     for(j=0;j<r;j++){
  102.         if(array[j][0]!=array[0][0])
  103.             return 0;
  104.         if(array[j][c-1]!=array[0][0])
  105.             return 0;
  106.     }
  107.     for(i=1;i<r-1;i++)
  108.         for(j=1;j<c-1;j++)
  109.             if(array[i][j]==array[0][0])
  110.                 return 0;
  111.     return 1;
  112. }
  113.  
  114. void put_array(int array[][MAX], int r, int c, int flag){
  115.     int i, j;
  116.     FILE * fp=my_fopen("w");
  117.     for(i=0;i<r;i++)
  118.         for(j=0;j<c;j++)
  119.             fprintf(fp, "%d%c", array[i][j], (j==c-1)?('\n'):('\t'));
  120.     fprintf(fp, "Matrix is %sframe", (flag==0)?("not "):(""));
  121.     fclose(fp);
  122. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement