Considerando o trecho de programa abaixo e os seguintes valores de entrada: 4, 7, 8, 2, 0, 1, 3, 4 e 2, qual será a saída produzida?
int lin, col, mat[3][3];
for (lin=0; lin<3; lin++)
for(col=0; col<3; col++)
cin >> mat[lin][col];
for (lin=0; lin< 3; lin++)
for(col=0; col<3; col++)
if (lin==col) cout << "\n" << mat[lin][col];
Olá,
Quando você começa um FOR, a variável é atualizada conforme o primeiro parametro e você está usando a mesma varíavel no 3º FOR, ou seja o seu codigo não irá funcionar e se funcionar ficará em loop eterno.
VEJA se o código abaixo serve, fiz algumas correçoes:
#include <iostream>
using namespace std;
int main()
{
int lin, col, lin2, col2, mat[3][3];
for(lin=0; lin<3; lin++) {
for(col=0; col<3; col++) {
cin >> mat[lin][col];
for (lin2=0; lin2< 3; lin2++){
for(col2=0; col2<3; col2++) {
if (lin==col) cout << "\n" << mat[lin][col];
}
}
}
}
system("pause");
return 0;
}
Ivo, desculpe, mas o código da postagem está correto. Veja que as estruturas de repetição (for) estão SEM CHAVES. Desta forma, apenas a linha subsequente será executada dentro de cada estrutura. Como as linhas subsequentes do primeiro e do terceiro for é um outro for, cria-se um loop aninhado SEM CHAVES, não ferindo de forma alguma a regra acima.
Então não há problema algum em usar novamente as mesmas variáveis, ainda mais porque são 2 blocos distintos: um para entrada de dados e outro para saída e normalmente reutilizamos as variáveis para dar maior coesão na interpretação do código.
Perceba ainda que na alteração que você fez, será feita uma varredura em todo vetor (e consequente saída caso a condição seja satisfeita) para cada uma das inserções de dados, o que convenhamos não tem sentido algum, pois o bloco de saída seria executado 9 vezes ao invés de uma única vez.
Façamos a identação para melhor visualização:
int lin, col, mat[3][3];
//este é o primeiro bloco. faz a inserção dos dados
for( lin = 0; lin < 3; lin++ )
for( col = 0; col < 3; col++
cin << mat[lin][col];
//Considerando as entradas (4, 7, 8, 2, 0, 1, 3, 4 e 2), o vetor será carregado da seguinte forma:
//mat[0][0] = 4, mat[0][1] = 7, mat[0][2] = 8
//mat[1][0] = 2, mat[1][1] = 0, mat[1][2] = 1
//mat[2][0] = 3, mat[2][1] = 4, mat[2][2] = 2
//este é o segundo bloco. faz a saída de dados
for( lin = 0; lin < 3; lin++ );
for( col = 0; col < 3; col++ )
if( lin == col ) cout << "\n" << mat[lin][col]
Só será produzida uma saída quando as variáveis lin e col forem iguais, ou seja, com os pares (0,0), (1,1) e (2,2). Olhando o vetor carregado, teremos:
4
1
2
respectivamente para mat[0][0], mat[1][1] e mat[2][2]
Espero ter ajudado. Abraços.
Para escrever sua resposta aqui, entre ou crie uma conta
Compartilhar