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

1

Răspunsuri

Cel mai inteligent răspuns!
2014-07-08T22:53:52+03:00
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];
}

Fii atent. Pentru a ne asigura ca programul e corect, for-ul ala il v-am imparti in doua for-uri. Primul, va scrie in prima jumatate a vectorului, elementele de pe diagonala secundara, si cel de-al doilea va scrie in continuare, elementele de pe diagonala secundara. Ce scriu in continuare, inlocuieste tot ce e dupa "cin>>b[i][j];}".
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) { if(j==n) (a[k]=b[i][j]; k++;} for(i=1;i<=n;i++)
for(j=1;j<=n;j++) {if(i==j)
{a[k]=b[i][j];k++}}; for(i=1;i<=2*n;i++)
cout<<a[i];
}
Mersi. :3
Glad i could help! :D