Jump to content
thinkabout

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

Recommended Posts

thinkabout

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

Share this post


Link to post
Share on other sites
polska

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.

Share this post


Link to post
Share on other sites
thinkabout

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
thinkabout

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

Share this post


Link to post
Share on other sites
polska

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.

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
thinkabout

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

Share this post


Link to post
Share on other sites
HappyHippyHippo

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

Share this post


Link to post
Share on other sites
thinkabout
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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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


×
×
  • 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.