Задача. а) Да се напише такава рекурсивна функция void abracadabra(int, StringArray &), че след изпълнението на програмата, дадена по-долу, на стандартния изход да се извежда низът ABRACADABRA.
В тялото на функцията abracadabra може да има:
- точно едно извикване към дефинираната функция void print(int &, StringArray &)
- произволен брой извиквания към abracadabra.
Не може:
- да се използват други функции за извеждане на текст (оператор <<, printf и т.н.)
- да се използва оператор =
- да се дефинират нови променливи.

#include <iostream>
#include <cstring>
using namespace std;

typedef char * String;
typedef String * StringArray;

void print(int & k, StringArray & array)
{
 cout << *(array + k);
}

void abracadabra(int k, StringArray & array)
{ // ...
}

int main()
{
 int i;

 StringArray array = new String[3];
 if (array == NULL)
 {
  cout<<"Not enough memory!\n";
  return 1;
 }

 for (i=0; i<3; i++)
 {
  String word = new char[4];
  if (word == NULL)
  {
   cout<<"Not enough memory!\n";
   return 1;
  }
  *(array + i) = word;
 }

 strcpy(array[0],"A");
 strcpy(array[1],"BR");
 strcpy(array[2],"CAD");

 abracadabra(2, array);
 cout<<"\n";

 for (i=0; i<3; i++)
  delete [] *(array + i);

 delete [] array;

 return 0;
}

б) Допустимо ли е извикването print(2, array); ?

в) Може ли параметърът array да не се предава по псевдоним?

Последно модифициране: събота, 12 ноември 2011, 17:38