Un text s de lungime 2n, unde n este un numar natural par, este codificat ın felul urmator: se construieste o matrice patrata de dimensiune n×n ın care primele n caractere ale lui s se gasesc ın ordine, de sus ın jos, pe diagonala secundara a matriciiiar urmatoarele n caractere ın ordine, de sus ın jos, pe diagonala principala. Restulcaracterelor matricii sunt generate aleator. Matricea este apoi transformata ıntr-un sir de caractere cod(s) prin concatenarea sirurilor de caractere reprezentate de liniile acesteia (ın ordine, de sus ın jos).Scrieti un program C/C++ care executa operatia de decodificare a procesului descrismai sus. Aplicatia citeste din fi¸sierul standard de intrare (tastatura) sirul de caracterecod(s) si extrage textul initial s (care a fost codificat).Exemplu: daca la intrare s-a introdus TPQAREDSXMRYIUVE, atunci rezultatul este ADMITERE, corespunzator matricii de codificare:
T  P  Q A
R E  D  S
X M  R  Y
I  U  V  E

Răspuns :

Programul nostru, trebuie sa scrie dintr-o matrice, intr-un vector, elementele de pe diagonala secundara, iar apoi in continuare pe cele de pe diagonala principala.
Am facut un programel, de care nu sunt 100% sigur. Eu nu l-am putut compila din cauza sintaxei invechite cu care sunt obisnuit. In caz ca ai Turbo c++, ar trebui sa mearga..
Astept un raspuns de la tine, oricum.
#include<iostream>
void main()
{int a[50], n, b[25][25], i,j,k;
cout<<"n="; cin>>n;
k=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"b["<<i<<"]["<<j<<"]=";
cin>>b[i][j];}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{if(i==j) // Elementele de pe diagonala principala vor intra direct in a doua jumatate a vectorului a,
{a[n+1]=b[i][j];
n=n+1;}
if(j==n)
{a[k]=b[i][j]; // Cele de pe diagonala secundara, voi fi introduse la inceputul vectorului,                           k=0, reprezentand pozitia primului element din vector.
k=k+1;}
}

for(i=1;i<=2*n;i++)
cout<<a[i];
}