Buscar

Saída produzida de um programa, alguém pode me explicar ? Gostaria de entender.

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];

💡 7 Respostas

User badge image

Ivo Tabajara de Souza Paiva

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;
}

1
Dislike0
User badge image

Marcelo Bastos

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.

0
Dislike0
User badge image

Marcelo Bastos

ERRATA !!! ERRO DE DIGITAÇÃO:

ONDE SE LÊ 

4

1

2

LEIA-SE

4

0

2

0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais