Returning Multiple Values

Asked

Viewed 58 times

1

The following code tells us to place a sequence of numbers in the following matrix and then assign a value to X and find out if the value of X is equal to some matrix value. But it is returning me as shown in "Output" below. How to resolve??

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>


int main(){


setlocale(LC_ALL, "");




int matriz[5][5], i, j;



for(i = 1; i <= 5; i++){
    for(j = 1; j <= 5; j++){


        printf("Matriz[%d][%d]: ", i, j);
        scanf("%d", &matriz[i][j]);

    }
}



int X;
printf("\n\nAgora vamos ler um valor X: ");
scanf("%d", &X);





for(i = 1; i <= 5; i++){
    for(j = 1; j <= 5; j++){


       if(X == matriz[i][j]){

        printf("\nEstá na linha: %d coluna: %d", i, j);
        

       }else{

       printf("\nNão Encontrado!! :(");
        
       }

    }
}

return 0;
}

Input

Matriz[1][1]: 1
Matriz[1][2]: 2
Matriz[1][3]: 3
Matriz[1][4]: 4
Matriz[1][5]: 5
Matriz[2][1]: 6
Matriz[2][2]: 7
Matriz[2][3]: 8
Matriz[2][4]: 9
Matriz[2][5]: 10
Matriz[3][1]: 11
Matriz[3][2]: 12
Matriz[3][3]: 13
Matriz[3][4]: 14
Matriz[3][5]: 15
Matriz[4][1]: 16
Matriz[4][2]: 17
Matriz[4][3]: 18
Matriz[4][4]: 19
Matriz[4][5]: 20
Matriz[5][1]: 21
Matriz[5][2]: 22
Matriz[5][3]: 23
Matriz[5][4]: 24
Matriz[5][5]: 25


Agora vamos ler um valor X: 16

Output

Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Está na linha: 4 coluna: 1
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(
Não Encontrado!! :(

I wish the output did not print these various "Undetected!! :("

  • I did not understand the question. Explain how you would like to leave the exit?

  • @Augustovasques Not printing these various "Not found", was to print this phrase only if the value of X is different from some value in the Matrix[i][j], but it is not what is happening there

  • 2

    C arrays are indexed to zero: the first element is at index zero, the second at index 1, and so on. Then access [5] is already wrong. The problem is that the language does not "complain", and depending on the compiler/environment may even "work", but it will be by "luck"/coincidence. That being said, the answer below gives a hint of how to do (save a variable with the search result and only print after the for - but with the detail that she did not alert to the problem of indexes)

  • 2

    This answers your question? Why the break is not working? - although the title has nothing to do, read the answers you have there, which shows how to do what you want

1 answer

3


Briefly, it is printing Não Encontrado!! :( several times why the condition is inside a repeat loop.

First of all: arrays in C begin in zero. What does that mean? Your matrix has 5 x 5 positions and you’re theoretically using only 4 x 4 of them. You are using only the elements that have 1. The ones that have 0 you are wasting.

0 0 0 0 0  
0 1 1 1 1 
0 1 1 1 1 
0 1 1 1 1 
0 1 1 1 1 

Then declare the matrix as follows to have 5 x 5 positions:

int matriz[5][5]

This way you have 5 position possibilities: 0,1,2,3,4. Your matrix looks like this:

1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1

Now for your problem. Note that in the snippet:

//Você percorre CADA elemento da matriz
for(i = 0; i < 5; i++){
    for(j = 0; j < 5; j++){

       //Se o elemento matriz[i][j] está na matriz, então imprima sua posição
       if(X == matriz[i][j]){

        printf("\nEstá na linha: %d coluna: %d", i, j);
        
       //Se o elemento matriz[i][j] não está nessa matriz, imprima Não encontrado
       }else{

       printf("\nNão Encontrado!! :(");
        
       }

    }
}

You make the comparison for each element. So, if the element matriz[i][j] is not equal to the value searched, you will print not found. As you pass element by element, the message is printed several times. To solve this some solutions are possible. One of them is: signal that the element was found:

bool stop = false;
//Percorra CADA elemento da matriz, se foi encontrado o elemento foi encontrado ou i < 5 você para.
for(i = 0; i < 5 && !stop ; i++){
    for(j = 0; j < 5 && !stop; j++){

       //Se o elemento matriz[i][j] está na matriz, então imprima sua posição e pare os laços.
       if(X == matriz[i][j]){

        printf("\nEstá na linha: %d coluna: %d", i, j);
        stop = true;
       
       }

    }
}
//Se o elemento não foi encontrado ( em nenhum momento passou para true )

if(!stop){
   printf("\nNão Encontrado!! :(");
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.