Atestat Informatica – Pascal/C/C++ – P. 15


Problema cu numarul 15 pentru atestatul la informatica.

Subiect

Se considera un tablou bidimensional patratic a cu n linii ale carui elemente memoreaza doar valori 0 si 1. Liniile si coloanele tabloului sunt numerotate incepand cu 1. Fisierul date.in contine pe prima linie numarul n, iar pe urmatoarele n linii sunt scrise cate n valori 0 si 1, separate cu cate un spatiu, reprezentand valorile elementelor tabloului a.

Se considera subprogramele:

  • - s1 care primeste prin intermediul parametrilor: a, un tablou bidimensional patratic cu cel mult 29 de linii, n, numarul efectiv de linii ale tabloului a, i, indicele unei linii din tabloul a. Subprogramul returneaza TRUE daca linia i contine cel putin trei valori 1 situate pe pozitii alaturate, altfel va returna FALSE
  • - s2 care primeste prin intermediul parametrilor: a, un tablou bidimensional patratic cu cel mult 29 de linii, n, numarul efectiv de linii ale tabloului a, j, indicele unei coloane din tabloul a. Subprogramul returneaza un numar natural reprezentand suma valorilor elementelor din coloana j a tabloului a


Cerinta

  • - scrieti definitia completa a celor doua subprograme
  • - scrieti un program principal Pascal/C/C++ care, folosind apeluri utile ale celor doua subprograme, sa citeasca datele din fisierul date.in si care sa determine si sa scrie in fisierul date.out pe prima linie numarul de linii ale tabloului a, linii ce contin cel putin 3 valori 1 situate pe pozitii alaturate, si pe a doua linie, separati prin cate un spatiu, indicii coloanelor ce contin mai multe valori 1 decat valori 0

Rezolvare in Pascal

Type matrice = array[1..30,1..30] of integer;
var a: matrice;
	n, i, j, k: integer;
	f, g: text;
procedure s1(var a: matrice; var n: integer);
var i, j: integer;
begin
	readln(f, n);
	for i := 1 to n do
		for j := 1 to n do
			read(f, a[i,j]);
	close(f);
end;
function s2(a: matrice, n, l: integer):integer;
var j: integer;
begin
	s2 := 0;
	for j := 1 to n-2 do
		if a[l,j] + a[l,j+1] + a[l,j+2] = 3 then
			s2 := 1;
end;
function s3(a: matrice; n, c: integer):integer;
var i, k: integer;
begin
	k := 0;
	for i := 1 to n do
		if a[i,c]=1 then k := k + 1;
	s3 := k;
end;
begin
	assign(f, 'date.in');
	reset(f);
	assign(g, 'date.out');
	rewrite(g);
	k := 0;
	s1(a, n);
	for i := 1 to n do
		if s2(a, n, i) = 1 then
			k := k + 1;
	writeln(g, k);
	k := 0;
	for j := 1 to n do
		if s3(a, n, j) > n/2 then
		begin
			write(g, j, ' ');
			k := k +1;
		end;
		if k = 0 then writeln(g, 'NU')
		else writeln(g);
	close(g);
end.

Rezolvare in C/C++

#include
void s1(int a[30][30], int &n) {
	int i, j;
	ifstream f("date.in");
	f>>n;
	for(i=1;i<=n;i++)
		for(j=1;j>a[i,j];
	f.close();
}
int s2(int a[30][30], int n, int l) {
	int j;
	for(j=1;j<=n-1;j++)
		if(a[l][j]+a[l][j+1]+a[l][j+2]==3) return 1;
	return 0;
}
int s3(int a[30][30], int n, int c) {
	int i, k=0;
	for(i=1;i<=n;i++)
		if(a[i][c]==1) k++;
	return k;
}
void main() {
	int a[30][30], n, i, j, k=0;
	ofstream g("date.out");
	s1(a, n);
	for(i=1;i<=n;i++)
		if(s2(a, n, i)) k++;
	g<<k<<endl;
	k=0;
	for(j=1;jn/2) {
			g<<j<<' ';
			k++;
		}
	if (!k) g<<"NU"<<endln;
	else g<<endln;
	g.close();
}

C’ya next time!



Ti-a placut articolul Atestat Informatica – Pascal/C/C++ – P. 15?

Ai nevoie de rezolvarea unei probleme la informatica?

Iti recomandam si urmatoarele articole:

1 comentariu pentru Atestat Informatica – Pascal/C/C++ – P. 15

  • andreea maria - 6 martie

    frumoasa problema…speram sa-mi cada la bacalaureat :|-)



Discuta articolul Atestat Informatica – Pascal/C/C++ – P. 15



Contul tau

Categorii

Mozku Network

Ne gasesti si pe Facebook

Articole noi

Fisiere populare

  • Proiect Atestat Informatica Visual FoxPro (439)
  • Twitter Patterns (202)
  • Flash Newsletter (126)
  • Baza de date auto revizuita (99)
  • hitTest Flash (99)

Marcaje articole