<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Test_Recursivitate</id>
	<title>Test Recursivitate - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.algopedia.ro/wiki/index.php?action=history&amp;feed=atom&amp;title=Test_Recursivitate"/>
	<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Test_Recursivitate&amp;action=history"/>
	<updated>2026-04-13T13:14:03Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://www.algopedia.ro/wiki/index.php?title=Test_Recursivitate&amp;diff=16105&amp;oldid=prev</id>
		<title>Bella: /* Rezolvare */</title>
		<link rel="alternate" type="text/html" href="https://www.algopedia.ro/wiki/index.php?title=Test_Recursivitate&amp;diff=16105&amp;oldid=prev"/>
		<updated>2019-03-27T15:03:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Rezolvare&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Test Recursivitate NR1 =&lt;br /&gt;
== NrVocRec ==&lt;br /&gt;
Să se scrie o funcţie C/C++ recursivă care primeşte ca parametru un şir de caractere format din litere mari/mici ale alfabetului englez şi spaţii şi returnează numărul de vocale din şir.&lt;br /&gt;
&lt;br /&gt;
Restricţii şi precizări&lt;br /&gt;
Numele funcţiei este nr_vocale&lt;br /&gt;
Funcţia are un singur parametru (şirul format din maxim 10000 caractere).&lt;br /&gt;
Exemplu:&lt;br /&gt;
nr_vocale(&amp;quot;Ana are mere&amp;quot;) = 6&lt;br /&gt;
&lt;br /&gt;
Important:&lt;br /&gt;
Dacă doriţi să folosiţi funcţiile predefinite pe şiruri de caractere (strlen, strchr etc), includeţi biblioteca cstring (string.h) înainte de a scrie definiţia funcţiei.&lt;br /&gt;
&lt;br /&gt;
====Varianta 1 ====&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
#include &amp;lt;cstring&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int nr_vocale ( char s[] ){&lt;br /&gt;
  char voc[] = &amp;quot;aeiouAEIOU&amp;quot;;&lt;br /&gt;
  if( s[0] != 0 ){&lt;br /&gt;
    if( strchr( voc,s[0] ) )&lt;br /&gt;
      return 1 + nr_vocale( s + 1 );&lt;br /&gt;
    else&lt;br /&gt;
      return nr_vocale( s + 1 );&lt;br /&gt;
 }&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
====Varianta 2 ====&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
int nr_vocale ( char s[] ){&lt;br /&gt;
   if( s[0] != 0 ){&lt;br /&gt;
      if( s[0] == &amp;#039;a&amp;#039;|| s[0]==&amp;#039;e&amp;#039; || s[0]==&amp;#039;i&amp;#039; || s[0]==&amp;#039;o&amp;#039; || s[0]==&amp;#039;u&amp;#039;||&lt;br /&gt;
          s[0] == &amp;#039;A&amp;#039;|| s[0]==&amp;#039;E&amp;#039; || s[0]==&amp;#039;I&amp;#039; || s[0]==&amp;#039;U&amp;#039; || s[0]==&amp;#039;O&amp;#039;)&lt;br /&gt;
        return 1 + nr_vocale(s+1);&lt;br /&gt;
      else  &lt;br /&gt;
        return nr_vocale(s+1);&lt;br /&gt;
   }&lt;br /&gt;
   return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== nr_aparitii_rec ==&lt;br /&gt;
&lt;br /&gt;
Cerința&lt;br /&gt;
Scrieţi în limbajul C++ definiţia completă a funcţiei recursive nr_aparitii cu următorul antet:&lt;br /&gt;
&lt;br /&gt;
view sourceprint?&lt;br /&gt;
1.&lt;br /&gt;
unsigned nr_aparitii(char *sir, char *secventa)&lt;br /&gt;
ce returnează numărul de apariţii ale şirului de caractere secventa în şirul sir.&lt;br /&gt;
&lt;br /&gt;
Restricții și precizări&lt;br /&gt;
cele două şiruri nu conţin spaţii şi au cel mult 1000 de caractere&lt;br /&gt;
biblioteca cstring (string.h) este deja inclusă la verificare&lt;br /&gt;
Exemplu:&lt;br /&gt;
nr_aparitii(&amp;quot;maimuta_samurai&amp;quot;, &amp;quot;mu&amp;quot;) = 2&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
unsigned nr_aparitii ( char *sir, char *secventa ) {&lt;br /&gt;
  char *p = strstr ( sir, secventa );                 // p primeste adresa nenula daca s-a gasit secventa in sir&lt;br /&gt;
  if ( p != 0 ) 									  &lt;br /&gt;
     return nr_aparitii( p + strlen ( secventa ) , secventa ) + 1;&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Harta1 ==&lt;br /&gt;
O hartă este codificată printr-o matrice cu N linii și M coloane de elemente numere naturale. Valoarea 0 semnifică o zonă cu apă. Zonele de uscat sunt codificate prin valori între 1 și K. Celulele aparținând unei țări I sunt codificate cu valoarea I. Fiecare țară este împărțită în departamente. Prin definiție, un departament reprezintă o mulțime de celule de aceeași valoare, continuă pe linii și coloane (nu și diagonale).&lt;br /&gt;
&lt;br /&gt;
Cerința&lt;br /&gt;
Fiind dată o hartă codificată ca mai sus. să se determine:&lt;br /&gt;
&lt;br /&gt;
a) Suprafața totală a apei.&lt;br /&gt;
b) Lista țărilor cu cele mai multe departamente, ordonată crescător.&lt;br /&gt;
&lt;br /&gt;
Date de intrare&lt;br /&gt;
Fișierul de intrare harta1.in conține pe prima linie p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2. Pe a doua linie conține valorile N, M și K cu semnificația din enunț. Pe următoarele N linii câte M valori, despărțite prin câte un spațiu, reprezentând codificarea hărții.&lt;br /&gt;
&lt;br /&gt;
Date de ieșire&lt;br /&gt;
Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerință.&lt;br /&gt;
&lt;br /&gt;
În acest caz, în fişierul de ieşire harta1.out se va scrie un singur număr natural n1, reprezentând suprafata totala a apei.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerință.&lt;br /&gt;
&lt;br /&gt;
În acest caz, fişierul de ieşire harta1.out va conține pe prima și singura linie valorile ce reprezintă codurile țărilor cu număr maxim de departamente, separate prin câte un spațiu, în ordine crescătoare.&lt;br /&gt;
&lt;br /&gt;
Restricții și precizări&lt;br /&gt;
* 1 ≤ N , M ≤ 100&lt;br /&gt;
* 1 ≤ K ≤ 10&lt;br /&gt;
* O zonă de uscat poate conține mai multe departamente dintr-o aceeași țară.&lt;br /&gt;
Pentru rezolvarea corectă a cerinței a) se acordă 20% din punctaj, pentru rezolvarea corectă a ambelor cerințe se acordă punctajul maxim.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemplul 1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
harta1.in&lt;br /&gt;
&lt;br /&gt;
 1&lt;br /&gt;
 5 5 3&lt;br /&gt;
 1 1 2 0 0&lt;br /&gt;
 3 1 0 2 2&lt;br /&gt;
 3 0 0 0 2&lt;br /&gt;
 0 1 3 0 0&lt;br /&gt;
 0 2 2 1 0&lt;br /&gt;
harta1.out&lt;br /&gt;
&lt;br /&gt;
 11&lt;br /&gt;
Explicație&lt;br /&gt;
Se va rezolva numai cerința a). Suprafața apei reprezintă numărul de valori de 0 din matrice.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Exemplul 2&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
harta1.in&lt;br /&gt;
&lt;br /&gt;
 2&lt;br /&gt;
 5 5 3&lt;br /&gt;
 1 1 2 0 0&lt;br /&gt;
 3 1 0 2 2&lt;br /&gt;
 3 0 0 0 2&lt;br /&gt;
 0 1 3 0 0&lt;br /&gt;
 0 2 2 1 0&lt;br /&gt;
harta1.out&lt;br /&gt;
&lt;br /&gt;
 1 2&lt;br /&gt;
Explicație&lt;br /&gt;
Se va rezolva numai cerința b). Țările cu cele mai multe departamente (3 departamente) sunt țările 1 și 2. Se observă că una din zonele de uscat conține 2 departamente distincte ale țării 1.&lt;br /&gt;
&lt;br /&gt;
===Rezolvare===&lt;br /&gt;
&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;fstream&amp;gt;&lt;br /&gt;
using namespace std;&lt;br /&gt;
int a[102][102], viz[102][102], m, n;&lt;br /&gt;
int dep[11];&lt;br /&gt;
int dl[4] = { -1, 0, 1, 0 };&lt;br /&gt;
int dc[4] = {  0, 1, 0,-1 };&lt;br /&gt;
ifstream fin ( &amp;quot;harta1.in&amp;quot; );&lt;br /&gt;
ofstream fout ( &amp;quot;harta1.out&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
void fill( int l, int c, int val ){&lt;br /&gt;
  a[l][c] = 0;                         // marcam ca vizitata casuta&lt;br /&gt;
  for ( int i = 0; i &amp;lt; 4; i++ ){       // parcurgem toti vecinii si apelam fill pentru vecinii egali cu 1&lt;br /&gt;
    int x, y;&lt;br /&gt;
    x = l + dl[i];&lt;br /&gt;
    y = c + dc[i];&lt;br /&gt;
    if ( a[x][y] == val )&lt;br /&gt;
      fill ( x, y, val );&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int main (){&lt;br /&gt;
  int i, j, p, k;&lt;br /&gt;
  // citire matrice&lt;br /&gt;
  int apa = 0;&lt;br /&gt;
  fin &amp;gt;&amp;gt; p;&lt;br /&gt;
  fin &amp;gt;&amp;gt; m &amp;gt;&amp;gt; n &amp;gt;&amp;gt; k;&lt;br /&gt;
  for (  i = 1; i &amp;lt;= m; i ++ )&lt;br /&gt;
    for ( j = 1; j &amp;lt;= n; j ++ ){&lt;br /&gt;
       fin &amp;gt;&amp;gt; a[i][j];&lt;br /&gt;
       if ( ! a[i][j] )&lt;br /&gt;
        apa++;&lt;br /&gt;
    }&lt;br /&gt;
  // Bordare matrice : este bordata cu 0, fiind declarata global&lt;br /&gt;
&lt;br /&gt;
  if ( p == 1 )&lt;br /&gt;
    fout &amp;lt;&amp;lt; apa;&lt;br /&gt;
  else{&lt;br /&gt;
    for ( i = 1; i &amp;lt;= m; i ++ )&lt;br /&gt;
      for ( j = 1; j &amp;lt;= n; j ++ )&lt;br /&gt;
        if( a[i][j] ){                 // Pentru fiecare element ramas nenul, al matricei, apelez functia de umlmere&lt;br /&gt;
          dep[a[i][j]] ++;             // marchez ca am mai gasit un departament pentru tara a[i][j]&lt;br /&gt;
          fill( i, j, a[i][j] );&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
    int dmax = 0;&lt;br /&gt;
    for ( i = 1; i &amp;lt;= k; i ++ )&lt;br /&gt;
     if ( dep[i] &amp;gt; dmax )&lt;br /&gt;
       dmax = dep[i];&lt;br /&gt;
    for ( i = 1; i &amp;lt;= k; i ++ )&lt;br /&gt;
     if ( dep[i] == dmax )&lt;br /&gt;
       fout&amp;lt;&amp;lt; i &amp;lt;&amp;lt; &amp;quot; &amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
  return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bella</name></author>
	</entry>
</feed>