Ir para o conteúdo
thinkabout

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

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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])

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Editado por polska

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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
}

[.......]

}

Editado por thinkabout

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.