Jump to content

Não existir repetições na 1 coluna - Matriz 10x3


Recommended Posts

Posted

Boas Pessoal,

Estou com problemas em conseguir resolver a segunda parte da questão, aceitam-se sugestões.

Desenvolva um programa que inicialize uma matriz 10×3 da seguinte forma: em cada uma das

linhas, a primeira coluna deve ficar com um inteiro entre 1 e 100 introduzido pelo utilizador, a

segunda coluna com o quadrado deste valor e a terceira com o cubo. Após a inicialização, o

programa deve apresentar o conteúdo completo da matriz no monitor e indicar quantas posições

da matriz têm valores superiores a 1000.

Altere o programa do ponto anterior, de modo a garantir que não existem repetições nos

valores que ficam guardados na primeira coluna (os valores indicados pelo utilizador).

int verifica1coluna(int matriz[][COLUNAS] )
{
int i,j;
for (j=0; j<LINHAS; j++)
{
 if (matriz[i][0] == matriz[j][0])
 {
  return 1;
  break;
 }
 else
  return 0;
}
}int main()
{
int i=0, j=0, matriz [LINHAS] [COLUNAS],valoresup=0;
for (i=0; i<LINHAS; i++)
{
 do  {
 scanf ("%d", &matriz[i][0]);
  }
 while (INT_INF > matriz [i][0]  || INT_SUP < matriz [i][0] && verifica1coluna(matriz) );
 matriz [i][1]=matriz [i][0]*matriz [i][0]; // Calcular o Quadrado
 matriz [i][2]=matriz [i][0]*matriz [i][0]*matriz [i][0]; // Calcular o Cubo}
 for (i=0;i<LINHAS;i++){
  for (j=0;j<COLUNAS;j++){
if (matriz [i][j]>=LIM)
{
 valoresup++;
}
printf ("matriz [%d][%d]=%d\t", i, j, matriz [i][j]);}
puts("");
}
 printf("a matriz tem %d, com valores superiores a 1000 \n", valoresup);}
Posted

Eu acho que complicaste muito a tua solução, de qualquer das maneiras, a começar pelo topo:

int verifica1coluna(int matriz[][COLUNAS] )
{
int i,j;
for (j=0; j<LINHAS; j++)
{
 if (matriz[i][0] == matriz[j][0])
 {
  return 1;
  break;
 }
 else
  return 0;
}

Se fazes o "return 1;" , não precisas do "break;" pois ao retornares um valor a função termina.

Outra coisa, estas a comparar a posição [0] , mas o i não foi inicializado com nenhum valor, não te deu erro ?

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted (edited)

Deu e já estava de volta disso, mas como nunca meti uma matriz de Bidimensional para dentro de uma função, não sei se estou a fazer bem.

Já tentei meter ali um for com o valor i mas dá-me isto

'verifica1coluna' : not all control paths return a value

Edited by thinkabout
Posted

Deu e já estava de volta disso, mas como nunca meti uma matriz de Bidimensional para dentro de uma função, não sei se estou a fazer bem.

Já tentei meter ali um for com o valor i mas dá-me isto

'verifica1coluna' : not all control paths return a value

o compilador detectou que poderá existir algum caso que leva a que a função termina sem que se retorne nenhum valor.

sem código é impossível dizer mais ...

IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)
int verifica1coluna(int matriz[][COLUNAS] )
{
int i,j;
for (j=0; j<LINHAS; j++)
{

 for (i = 0; i < LINHAS; i++)
 {
  if (matriz[i][0] == matriz[j][0])
  {
  return 1;
  }
  else
  return 0;
 }
}
}

Aqui devo ter asneira, nunca passei matriz que mais que uma dimensão

int verifica1coluna(int matriz[][COLUNAS] )

^- logo aqui estou a meter 3 quando quero que seja na coluna 1,

O que acabo por forçar aqui

(matriz[0] == matriz[j][0])

Edited by thinkabout
Posted (edited)

Deu e já estava de volta disso, mas como nunca meti uma matriz de Bidimensional para dentro de uma função, não sei se estou a fazer bem.

Já tentei meter ali um for com o valor i mas dá-me isto

'verifica1coluna' : not all control paths return a value

De certeza que estou a meter mal os valores.

int verifica1coluna(int matriz[][COLUNAS] ) <- logo aqui tou a meter 3 quando quero que seja na coluna 1,

O que acabo por forçar aqui

(matriz[0] == matriz[j][0])

Tu não estas a meter mal os valores, tu não estás é mesmo a meter valor nenhum na tua variável "i" ... Seguindo a maneira que estas a fazer o teu programa, o que tu queres nessa função é verificar se o valor que o utilizador deu já foi anteriormente inserido, correcto? Correcto, mas para isso precisas de também passar no parâmetro da função o valor que vais atribuir ao "i", que neste caso é, a coluna em que o utilizador inseriu o valor no momento.

Edited by polska

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Posted

os teus erros não tem nada haver com os arrays que dás à função

1º - o if é verdadeiro ou falso : logo retorna logo na primeira comparação (1 ou zero)

2º - o compilador não sabe se realmente entras nos ciclos for (imagina que LINHA tem o valor 0), que valor será retornado ?

IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)

O valor só pode ser entre 1 e 100

Ele não vai verificar o if 10 vezes ? 😞

int verifica1coluna(int matriz[][COLUNAS] )
{
int i,j;
i =  matriz[i][0];
for (j=0; j<LINHAS; j++)
{
 if (matriz[i][0] == matriz[j][0])
  return 1;
}
}

Continuo com o problema do não ter o valor do i.

E também com o erro 'verifica1coluna' : not all control paths return a value

Edited by thinkabout
Posted

O valor só pode ser entre 1 e 100

dizes tu, o compilador não sabe disso

Ele não vai verificar o if 10 vezes ? 😞

depende .. de que código estás a falar ... em cada post metes um código diferente ...

Continuo com o problema do não ter o valor do i.

E também com o erro 'verifica1coluna' : not all control paths return a value

já foi explicado

IRC : sim, é algo que ainda existe >> #p@p
Posted (edited)
int verifica1coluna(int matriz[LINHAS][COLUNAS],int a )
{
 int i=0;
 printf("o valor que recebi foi %d \n",a);

  for (i=0; i<LINHAS; i++)
{
  if (matriz[i][0] == a)
return 1;

}
  return 0;
}

int main()
{
int a, i=0, j=0, matriz [LINHAS] [COLUNAS],valoresup=0;
for (i=0; i<LINHAS; i++)
{
 printf("Vou fazer a pergunta %d \n", j++);
 do  {
 scanf ("%d", &a);
  }
 while (INT_INF > a || INT_SUP < a || verifica1coluna(matriz,a) );
 matriz[i][0] = a;
 matriz [i][1]=matriz [i][0]*matriz [i][0]; // Calcular o Quadrado
 matriz [i][2]=matriz [i][0]*matriz [i][0]*matriz [i][0]; // Calcular o Cubo
}

[.......]

}
Edited by thinkabout

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.