Informatică, întrebare adresată de NickoTyn, 8 ani în urmă

uaia spectacolului cupiclul cel al
on
0,5p
7. Rezolvați următoarele cerinte:
a. creați o funcţie care citeste dintr-un fişier dimensiunea unei matrice pătratice si apoi valorile din
matrice. Funcția returnează prin intermediul a 2 parametrii matricea si dimensiunea sa.
0,5p
b. creaţi o funcţie care verifica daca un număr primit ca parametru face parte din surul lui Fibonacci
sau nu. Funcția returnează 1 daca numărul face parte si o in caz contrar.
C. creaţi o funcţie care numără cate valori dintr-o submatrice a unei matrice, aparţin şirului lui
Fibonacci. Funcția primește ca parametri matricea inițiala, dimensiunea ei si elementele ce
delimitează submatricea (linia si coloana elementului din stânga-sus si linia si coloana elementului
din dreapta-jos). Funcția returnează numărul de valori cerut
0,5p
d. creaţi o funcţie care găsește cea mai mare submatrice a unei matrice ce nu conține nici un număr
din şirul lui Fibonacci. Funcția primește ca parametri matricea iniţiala si dimensiunea sa si returnează
valoarea ceruta.
0,5p
e. scrieți un program care fără a folosi variabile globale apelează funcțiile declarate la subpunctul a si
subpunctul d.
0,5p​

Răspunsuri la întrebare

Răspuns de Paddon
1

a.

void read_matrix(int& size, int matrix[][10])

{

   fstream file_in("file.in");

   file_in >> size;

   for(int i = 0; i < size; i++)

       for(int j = 0; j < size; j++)

           file_in >> matrix[i][j];

   file_in.close();

}

b.

bool isFib(int n)

{

   int c1 = 1, c2 = 1;

   while(c2 < n)

   {

       int c3 = c2;

       c2 = c1 + c2;

       c1 = c3;

   }

   return c2 == n;

}

c.

int counter(int size1, int matrix[][10], int start_row, int start_column,

       int end_row, int end_column)

{

   int count = 0;

   for(int i = start_row; i < end_row; i++)

       for(int j = start_column; j < end_column; j++)

           if(isFib(matrix[i][j]))

               count++;

   return count;

}

d.

int finder(int size, int matrix[][10])

{

   int current = 1;

   while(current < size)

   {

       for(int i = 0; i < current; i++)

           if( isFib(matrix[current][i]) || isFib(matrix[i][current]) )

               return current - 1;

       current++;

   }

   return size;

}

e.

#include <iostream>

#include <fstream>

using namespace std;

void read_matrix(int& size, int matrix[][10])

{

   fstream file_in("file.in");

   file_in >> size;

   for(int i = 0; i < size; i++)

       for(int j = 0; j < size; j++)

           file_in >> matrix[i][j];

   file_in.close();

}

bool isFib(int n)

{

   int c1 = 1, c2 = 1;

   while(c2 < n)

   {

       int c3 = c2;

       c2 = c1 + c2;

       c1 = c3;

   }

   return c2 == n;

}

int counter(int size1, int matrix[][10], int start_row, int start_column,

       int end_row, int end_column)

{

   int count = 0;

   for(int i = start_row; i < end_row; i++)

       for(int j = start_column; j < end_column; j++)

           if(isFib(matrix[i][j]))

               count++;

   return count;

}

int finder(int size, int matrix[][10])

{

   int current = 1;

   while(current < size)

   {

       for(int i = 0; i < current; i++)

           if( isFib(matrix[current][i]) || isFib(matrix[i][current]) )

               return current - 1;

       current++;

   }

   return size;

}

int main()

{

   int size, matrix[10][10];

   read_matrix(size, matrix);

   cout << finder(size, matrix) << endl;

   return 0;

}

Posibil sa apara ceva greseli datorita neatentiei mele. Spune-mi daca e cazul.

Alte întrebări interesante