Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Probleme UBB  (Citit de 3773 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
stefanmurii
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« : Iulie 10, 2015, 14:46:40 »

Salut !
As avea nevoie de o solutie la aceasta problema daca se poate. Chiar nu-mi vine nimic in minte...

Se da o matrice cu n linii si n coloane si se cere sa se interschimbe elementele din triunghiul superior cu cele din triunghiul inferior iar cele din triunghiul din stanga cu cele din triunghiul din dreapta. Nu gasesc vreo legatura generala intre i si j pentru a le putea interschimba:-?

Multumesc anticipat !!
Memorat
TheNechiz
De-al casei
***

Karma: 30
Deconectat Deconectat

Mesaje: 145



Vezi Profilul
« Răspunde #1 : Iulie 31, 2015, 15:39:40 »

A[ i ][ j ] aparține matricei A, 0 <= i,j <= N-1.

Elementele diagonalei principale respectă relația i = j, altfel spus au forma A[ i ][ i ]. ( Cele colorate cu verde )
Elementele diagonalei secundare sunt de forma A[ i ][ N-i-1 ]. ( Cele colorate cu albastru )


INTERSCHIMBARE TRIUNGHI SUPERIOR/INFERIOR:
Cod:
    for( i = 0 ; i < N/2 ; ++i )
        for( j = i+1 ; j < N-i-1 ; ++j )
        {
            aux = Mat[i][j];
            Mat[i][j] = Mat[N-i-1][j];
            Mat[N-i-1][j] = aux;
        }

INTERSCHIMBARE TRIUNGHI STANGA/DREAPTA:
Cod:
    for( j = 0 ; j < N/2 ; ++j )
        for( i = j+1 ; i < N-j-1 ; ++i )
        {
            aux = Mat[i][j];
            Mat[i][j] = Mat[i][N-j-1];
            Mat[i][N-j-1] = aux;
        }

Sursă completă:
Cod:
# include <stdio.h>
# define InFile "input.txt"
# define OutFile "output.txt"
# define NMax 1000

int N,Mat[NMax][NMax];

void Citire()
{
    int i,j;
    scanf("%d",&N);
    for( i = 0 ; i < N ; ++i )
        for( j = 0 ; j < N ; ++j )
            scanf("%d",&Mat[i][j]);
}

void Rezolvare()
{
    int i,j,aux;

    // Triunghi superior - Triunghi inferior
    for( i = 0 ; i < N/2 ; ++i )
        for( j = i+1 ; j < N-i-1 ; ++j )
        {
            aux = Mat[i][j];
            Mat[i][j] = Mat[N-i-1][j];
            Mat[N-i-1][j] = aux;
        }

    // Triunghi stanga - Triunghi dreapta
    for( j = 0 ; j < N/2 ; ++j )
        for( i = j+1 ; i < N-j-1 ; ++i )
        {
            aux = Mat[i][j];
            Mat[i][j] = Mat[i][N-j-1];
            Mat[i][N-j-1] = aux;
        }

}

void Tipar()
{
    int i,j;

    for( i = 0 ; i < N ; ++i, putchar('\n') )
        for( j = 0 ; j < N ; ++j )
            printf("%d ",Mat[i][j]);
}

int main()
{
    freopen(InFile,"r",stdin);
    freopen(OutFile,"w",stdout);

    Citire();
    Rezolvare();
    Tipar();

    return 0;
}

« Ultima modificare: August 01, 2015, 10:58:03 de către Birisan Razvan » Memorat
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines