Ir para conteúdo
Fórum Script Brasil
  • 0

matriz dinamica


Visitante

Pergunta

1 resposta a esta questão

Posts Recomendados

  • 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 para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...