Fórum Script Brasil
• 0

# matriz dinamica ## Question sd

Edited by alexandremcf
quero excluir

## 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/

## Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account. ×   Pasted as rich text.   Paste as plain text instead

Only 75 emoji are allowed.

×   Your previous content has been restored.   Clear editor

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

• ### Forum Statistics

• Total Topics
149.9k
• Total Posts
646.8k
×

• #### Activity

×
• Create New...