polska Posted April 9, 2012 at 12:15 AM Report #448156 Posted April 9, 2012 at 12:15 AM Bem pessoal, tenho fiz um exercício onde o objectivo era dado uns numeros, descobrir qual a menor diferença entre eles, por exemplo, a menor diferença entre 1 3 5 , é 2 ... Bem, no inicio o programa deve pedir N, que é o numero de vezes que vou pedir numeros, depois para cada uma das vezes peço k, que é o numero de numeros que são dados.. Depois é so descobrir a menor diferença, N vezes.. Exemplo: INPUT OUTPUT 3(N) 5(k) 5 8 1 4 7 - > 1 3(k) 1 3 5 - > 2 4(k) 8 4 2 1 -> 1 Eu realizei o programa... e esta a dar tudo certinho, mas, seguindo esse exemplo, o 8 4 2 1 dá-me resultado 2 .. e eu não estou a perceber onde esta o erro, já fiz uma traçagem mas nao cheguei lá á mesma... Este é o meu prog: #include <stdio.h> int main(){ int n,k,nums[1000],menorDiferenca=9999999,maior,menor; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&k); for(int l=1;l<=k;l++){ scanf("%d",&nums[l]); } for(int m=0;m<k;m++){ for(int n=m;n<k;n++){ if(nums[m]!=nums[n]){ if(nums[m]>nums[n]){ maior=nums[m]; menor=nums[n]; }else{ maior=nums[n]; menor=nums[m]; } if(maior-menor<menorDiferenca){ menorDiferenca=maior-menor; } } } } printf("%d\n",menorDiferenca); menorDiferenca=9999999; } return 0; } PS: a var: menorDiferenca esta em 9999999 porque os valores que posso atribuir vao até 1 milhão.. logo a maior diferença possivel seria 1 milhao menos 1.. xD Alguem me ajuda? Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
bsccara Posted April 9, 2012 at 12:35 AM Report #448157 Posted April 9, 2012 at 12:35 AM Tens um erro aqui: for(int l=1;l<=k;l++){ Os indices dos arrays começam em zero. Metendo os valores indicados vão ser atríbuidos assim : nums[0] = ? nums[1] = 8 nums[2] = 4 nums[3] = 2 nums[4] = 1 Depois nas comparações vais percorrer do indíce 0 ao 3. Logo dependendo do valor de nums[0] a menor diferença pode ser entre os nums[2] e nums[3].
polska Posted April 9, 2012 at 01:28 PM Author Report #448200 Posted April 9, 2012 at 01:28 PM Tens um erro aqui: for(int l=1;l<=k;l++){ Os indices dos arrays começam em zero. Metendo os valores indicados vão ser atríbuidos assim : nums[0] = ? nums[1] = 8 nums[2] = 4 nums[3] = 2 nums[4] = 1 Depois nas comparações vais percorrer do indíce 0 ao 3. Logo dependendo do valor de nums[0] a menor diferença pode ser entre os nums[2] e nums[3]. Eu até ia dizer que o que eu fiz estava correcto, porque eu pensava que nao estava a usar o k para mexer no array, mas estou, estou a usar para guardar os numeros nas posições do array, tens razão, obrigado já esta a funcionar direito ;D Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.
cLima Posted April 9, 2012 at 03:53 PM Report #448243 Posted April 9, 2012 at 03:53 PM Bem, não querendo ser demasiado picuinhas... Não há cá declarações de variáveis dentro do cabeçalho de ciclos for, isto não é Javascript... E esse código podia ficar bem mais legível se cortasses nas chavetas. Maioria desses ciclos/condições incluem só uma instrução. Snowboard / Apostas Desporto / Bullet Boys
pmg Posted April 9, 2012 at 04:07 PM Report #448244 Posted April 9, 2012 at 04:07 PM Bem, não querendo ser demasiado picuinhas... picuinhas é bom. Quanto mais picuinhas melhor! 👍 Não há cá declarações de variáveis dentro do cabeçalho de ciclos for, isto não é Javascript... Provavelmente é C99. A definição de variáveis dentro do cabeçalho do for, foi uma das boas novidades introduzidas na linguagem C padrão há 12 anos. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
cLima Posted April 9, 2012 at 04:16 PM Report #448247 Posted April 9, 2012 at 04:16 PM Provavelmente é C99. A definição de variáveis dentro do cabeçalho do for, foi uma das boas novidades introduzidas na linguagem C padrão há 12 anos. Hmm verdade seja dita, na faculdade são forçadas as normas C99, mas mesmo em Windows a programar com a Win32 API com um compilador baseado no LCC, e mesmo no Visual C++, nunca me foi aceite declarações dentro de ciclos(cabeçalhos). Estranho... Snowboard / Apostas Desporto / Bullet Boys
pmg Posted April 9, 2012 at 05:18 PM Report #448252 Posted April 9, 2012 at 05:18 PM Em Agosto de 2009/Janeiro de 2010, a situacao do Visual Studio em relacao a C99 era: "nao vamos implementar essa linguagem" (ver aqui e aqui). Nao sei se entretanto alguma coisa mudou. What have you tried? Não respondo a dúvidas por PM A minha bola de cristal está para compor; deve ficar pronta para a semana. Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!
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