• Acasă
  • Despre noi
  • Autori
  • Mărturii
  • Arhivă
  • Trimite Articol
  • Contact

WORLDIT

Lumea în 1 și 0.

  • Știri
    • Tehnologie
    • Tehnologie mobilă
    • Securitate
    • Developers
    • Știință
    • Benzi desenate
    • Jocuri
    • Intern
  • Tehnic
    • Browser
    • C#
    • C/C++
    • Challenge
    • HTML/CSS
    • Javascript, Ajax, jQuery
    • Open Source
    • PHP
    • Python
    • Securitate IT
    • Socializare
    • WordPress
    • Altele
  • Recenzii
  • Interviuri
  • Evenimente

Restaurarea unui apel de functie

1
  • Publicat de Coss
  • în Probleme algoritmică · Tehnic
  • — 1 nov., 2009 at 12:42 am

Se citeste din fisierul fisier.in un sir de maxim 100 de caractere care reprezinta o succesiune de nume de functii si variabile, formate dintr-un singur caracter. Pentru fiecare functie ce intervine in sir se citesc numele si aritatea ( numarul de argumente) de pe o linie din fisier. Restaurati sirul de caractere, punand la locul lor parantezele si virgulele, astfel incat sa reprezinta un apel de funcite corect. ef4c6ee758

Exemplu:

fxgxyzhx
f 3
g 3
h 1

functia restaurata va fi

f(x,g(x,y,z),h(x))
  • Solutie

Vom aborda problema recursiv. Memoram numele functiilor in vectorul NumeFunctie, iar aritatea o vom  memora in vectorul Aritate. Numarul de functii fa fi notat cu NrFunctii.

Pentru a restaura apelul de functie din sirul de caractere (pe care-l vom nota cu sir) vom utiliza o functie recursiva denumita Restaurare(), cu parametrul i. Cu ajutorul acestei functii vom indica pozitia la care am ajuns cu restarurarea in sirul de intrare. Mai precis, in functia Restaurare verificam daca pe pozitia i din sir este un nume de functie. In acest caz vom scrie numele functiei, urmat de ‘(‘ , apoi vom restaura din nou (recursiv) fiecare argument al functiei, separand argumentele prin ‘ , ‘. Dupa ce ultimul argument a fost restaurat, afisam caracterul ‘)’.

Programul va arata astfel:

#include  
#include 
using namespace std;

#define MAX 100

char NumeFunctie[MAX];
char sir[MAX];
int Aritate[MAX], NrFunctii;

void citire()
{
	ifstream f("fisier.in");
	char c;
	int a;
	f.getline(sir, 100);
	while (!f.eof() )
	{
		f>>c>>a;
		NumeFunctie[NrFunctii] = c;
		Aritate[NrFunctii++] = a;
	}
	f.close();
}

int AR (char c)
{
 for (int j=0; j<NrFunctii; ++j)
 if (NumeFunctie[j] == c) return Aritate[j];
 return 0;
}

void Restaurare (int & i)
{
 int k, j;
 cout<<sir[i];
 k = AR(sir[i++]);
 if (k)
 {
 cout<<'(';
 for (j=1; j<k; ++j)
 {
 Restaurare(i);
 cout<<',';
 }
 Restaurare(i);
 cout<<')';
 }
}

int main()
{
	int i = 0;
	citire();
	Restaurare(i);
	return 0;
}

Etichete: C++functii recursiveONIprobleme recursivitateproblme informatica C++recursivitate

— Albulescu Cosmina a scris 223 articole

Nu există o descriere a autorului.

  • Articolul anterior Listele Twitter – un nou feature
  • Articolul următor Noul site m.bing

1 Comentariu

  1. Radu spune:
    februarie 29, 2012 la 10:16 pm

    Salutare. Eu am de facut problema respectiva in C. Am refacut functiile de citire di nfisier din C++ in C, tot ce trebuie in C, dar programul imi da eroare” ) expected” la void Restaurare (int & i) , mai exact imediat dupa &. Poate cineva sa converteasca programul din C++ in C? poate am gresit eu ceva … Multumesc.


  • Facebook

    WorldIT.info
  • Ultimele Atacuri Cibernetice din Romania – RO Hacked

    [wp_rss_retriever url="https://rohacked.bit-sentinel.com/feed/" excerpt="none" items="5" read_more="false" new_window="true" thumbnail="false" cache="0"] RO Hacked este registrul atacurilor cibernetice din România.
  • Caută

  • Articole Recomandate

    • Recent Posts
    • Tags
    • Număr record de participanți la DefCamp 2015, cel mai important eveniment dedicat securității cibernetice din Europe Centrala si de Estdecembrie 2, 2015
    • La DefCamp 2015 vei afla prin ce tehnici pot fi evitate măsurile de securitate ale sistemelor informatice criticeoctombrie 16, 2015
    • Ultima sansa sa rezervi bilete de tip Early Bird la DefCamp 2015septembrie 1, 2015
    • 15 sfaturi despre cum poti deveni un programator bun venite de la specialisti romaniaugust 4, 2015
    • algoritmica Android antivirus Apple Avadanei Andrei benzi desenate BitDefender blog browser C++ Chrome concurs eveniment Facebook Firefox Google google chrome hacking html5 infografic informatica internet Internet Explorer IT javascript linux Microsoft Mozilla Firefox online PHP programare retea sociala review Romania securitate Tehnologie Twitter web Windows Windows 7 Wordpress WorldIT worldit.info Yahoo! YouTube
  • martie 2021
    L Ma Mi J V S D
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
    « dec.    
  • Link-uri Sponsorizate

    • laptop second hand

    • Calculatoare Second Hand

    • cod voucher pc garage

  • Home
  • Tehnic
  • C/C++
  • Probleme algoritmică
  • Restaurarea unui apel de functie
  • Important

    • Bit Sentinel
    • Centrul de Cercetare în Securitate Informatică din România
    • DefCamp
  • Prieteni

    • BetiT.ro
    • bijuterii handmade
    • Computerica | Resurse gratuite PC
    • Descopera.org
    • Gadgeturi si IT – Giz.ro
  • Prieteni

    • PC – Config
    • RO Hacked
    • Stiri IT

Copyright © 2009-2014 WORLDIT. Toate drepturile Rezervate.
Termeni și condiții | Contact | Licența Creative Commons