Jump to content
Fórum Script Brasil
  • 0

matriz dinamica


Guest
 Share

Question

1 answer to this question

Recommended Posts

  • 0

A resposta esta em descobrir em uma coluna a quantidade de casas que tem um numero, por exemplo, na ultima linha desse seu exemplo:

------------------
|10|100|  100|
------------------
| 1|     1|      1|
------------------
| 1|   10|1000|
------------------

Vamos pegar a ultima coluna:

-----------
.....| 100|
-----------
.....|   1|
-----------
.....|1000|
-----------

seria usar a função que pertence a tal biblioteca iomanip, que se chama setw, e fazer algo como isso:

#include <iostream>     // std::cout, std::endl
#include <iomanip>      // std::setw

int main () {
  std::cout << '|' << std::setw(4) << 100  << '|' << std::endl;
  std::cout << '|' << std::setw(4) << 1    << '|' << std::endl;
  std::cout << '|'                 << 1000 << '|' << std::endl;  
  return 0;
}

Que de saída gera algo como:

| 100|
|   1|
|1000|

Conclusão... setw estabelece uma "largura" que se mede em letras, std::setw(4) quer dizer que eu quer usar uma largura de 4 letras para cada numero que eu colocar std::setw(4) adiante. Essa linha:

std::cout << '|' << std::setw(4) << 100  << '|' << std::endl;

...é como dizer, imprime '|', depois imprime 100 como si tivesse 4 letras, evidentemente si não tem 4 letras o setw preenche com espaços, e logo depois pinte '|' novamente. O sewt somente afeta ao seguinte que vai ser impresso, si não a barra sairia 3 espaços mais adiante.

Então como falei antes, descobre quantas casinhas tem o maior numero da coluna e use isso valor de parâmetro para setw. Um exemplo para saber o maior numero da coluna é:

#include <iostream>     // std::cout, std::endl
#include <iomanip>      // std::setw

int main () {
    int num = 1000; 
    int digitos = 1; // um digito sempre deve ter, nem que seja o zero ;)
    
    while ( (num / 10) > 0 ) {
        num = num / 10;
        digitos++;
    }
    
    std::cout << "num contem " << digitos << " Digitos" << std::endl;
    std::cout << '|' << std::setw ( digitos ) << 100  << '|' << std::endl;
    std::cout << '|' << std::setw ( digitos ) << 1    << '|' << std::endl;
    std::cout << '|' << std::setw ( digitos ) << 1000 << '|' << std::endl;
    return 0;
}

 

Mas o anterior não serve para seu exemplo, você quer buscar o maior valor de cada coluna, e logo usar o setw antes de imprimir um valor que esta em uma linha e não em uma coluna, sendo assim montei esse exemplo:
 

#include <iostream>     // std::cout, std::endl
#include <iomanip>      // std::setw
using namespace std;

int main (){
    const int coluna = 3;
    const int linha  = 3;
    
    //Guarde os valores da coluna aqui desde mesma forma, si vai guardar uma matriz maior nao se esqueça de mudar os atributos de linha e coluna para que funcione perfeitamente os loops.
    int matriz [linha][coluna]= {
        {10,100, 100},
        {1 ,  1,   1},
        {1 , 10,1000}
    };
    
    int maior[coluna]={0};
    
    //buscamos o maior valor de cada coluna:
    for ( int i = 0; i < coluna; i++ ){
        for (int z = 0; z < linha; z++){
            if ( matriz[z][i] > maior[i]  ){
                maior[i] = matriz[z][i];
            }
        }
    }
    
    //mostra o maior valor de cada coluna:(Essa parte pode ser borrada sem problemas, é somente informativa.)
    cout << "O maior valor que tem em cada coluna." << endl;
    for ( int n: maior){
        cout << n << ", ";
    }
    
    //Agora só usar o explicado antes para imprimir, mas nao será moleza.
    cout << "\n" << endl;
    for ( int i = 0; i < linha; i++ ) {
        int aux = maior[i]; // Guardamos o maior valor de cada coluna em uma variavel auxiliar para reutilizar o proprio vetor para albergar a quantidade de digitos que tem o maior numero que pertence a cada coluna, faremos isso uma vez por cada coluna para saber a quantidade de digitos que tem o maior numero de cada coluna. ;)
        maior[i] = 1;
        while ( ( aux / 10 ) > 0 ) {
            aux = aux / 10;
            maior[i]++; // Como vemos, agora maior[i] ja contem a quantidade de digitos que éo que precisamos saber para poder usar setw na hora de imprimir.
        }
        
    }

    //mostra a quantidade de cifras que vai ter cada coluna, essa parte pode ser borrada sem problemas, é somente informativa.
    cout << "Quantidade de cifras que tem o maior valor em cada coluna." << endl;
    int x = 0;
    for ( int n: maior){
        cout << setw( maior[x] ) << n;
        x++;
    }
    
    //E agora tudo certo... Só falta imprimir =)
    cout << endl;    
    for ( int i = 0; i<linha; i++ ){
        for( int z = 0; z < coluna; z++ ){
            cout << '|' << setw(maior[z]) << matriz[i][z];
        }
        cout << '|' << endl;
    }    

    cin.ignore();
    return 0;
}

É só mudar a matriz, e só mudar os atributos de coluna e linha para uma matriz diferente. ;)
Não tenho muito tempo Assim que perdoe si não posso explicar bem, mas deixei o código mais ou menos bem comentado.

Veja mais info aqui:
http://www.cplusplus.com/reference/iomanip/setw/

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share



  • Forum Statistics

    • Total Topics
      149.9k
    • Total Posts
      646.8k
×
×
  • Create New...