thinkabout Posted February 25, 2013 at 10:58 PM Report #497001 Posted February 25, 2013 at 10:58 PM 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);}
polska Posted February 25, 2013 at 11:13 PM Report #497004 Posted February 25, 2013 at 11:13 PM 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.
thinkabout Posted February 25, 2013 at 11:17 PM Author Report #497006 Posted February 25, 2013 at 11:17 PM (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 February 25, 2013 at 11:29 PM by thinkabout
HappyHippyHippo Posted February 25, 2013 at 11:23 PM Report #497008 Posted February 25, 2013 at 11:23 PM 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 Portugol Plus
thinkabout Posted February 25, 2013 at 11:26 PM Author Report #497010 Posted February 25, 2013 at 11:26 PM (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 February 25, 2013 at 11:29 PM by thinkabout
polska Posted February 25, 2013 at 11:29 PM Report #497013 Posted February 25, 2013 at 11:29 PM (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 February 25, 2013 at 11:30 PM by polska Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
HappyHippyHippo Posted February 25, 2013 at 11:30 PM Report #497014 Posted February 25, 2013 at 11:30 PM 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 Portugol Plus
thinkabout Posted February 25, 2013 at 11:40 PM Author Report #497017 Posted February 25, 2013 at 11:40 PM (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 February 25, 2013 at 11:49 PM by thinkabout
HappyHippyHippo Posted February 26, 2013 at 12:15 AM Report #497020 Posted February 26, 2013 at 12:15 AM 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 Portugol Plus
thinkabout Posted February 27, 2013 at 10:30 PM Author Report #497327 Posted February 27, 2013 at 10:30 PM (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 February 27, 2013 at 10:33 PM by thinkabout
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now