Jump to content
Sign in to follow this  
m90mine

Problema em codigo C

Recommended Posts

m90mine

Boas

estou com um problema neste codigo mas nao consigo detectar o erro

quando pede para introduzir o numero do vector eu introduzo e logo a seguir aparece uma janela a dizer que o sistema deixou de funcionar

alguem pode ajudar?

#include<stdio.h>
#include<stdlib.h>

main(){
       int a[10],i,j,m,n;
       printf("introduza o numero do vector:\n");
       scanf("%d",&n);
       
       for(i=1;i<=n;i++)
       {
       printf("introduza os valor do vector a[%d]:\n",i);
       scanf("a[%d]\n",&a[i]);
       }
       for(i=1;i<n-1;i++)
       {
                         for(j=i+1; j<=n ;j++)
                         {
                         
                         if(a[i]>a[j]);
                         }
                         }
                         {
       m=a[i];
       a[i]=a[j];
       a[j]=m;
       }
       for(i=1;i<=n;i++){
                         scanf("a[%d]",&a[i]);
                         
                         }
       
       
             system("pause");
}

Share this post


Link to post
Share on other sites
KTachyon

Pelo que vejo, tu introduzes o valor e ele chama o "pause".

Primeiro, não deves utilizar o system("pause"), até porque isso obriga a que o teu computador faça uma mudança de contexto só para teres o programa em pausa. Para além de só ser compatível com Windooze.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Baderous

Edit: já percebi.

Problema de buffering.

E aquela leitura do 2º scanf não me parece muito correcta.

Share this post


Link to post
Share on other sites
RSFalcon7

ok...

antes de mais, acho que o titulo do tópico devia ser mais específico

sobre o código:

[*]a main tem que devolver um inteiro (0 se correr tudo bem)

[*]para perceberes melhor o teu código, e para os outros (incluindo os profs) é melhor dar nomes às variáveis que representem a sua função, por exemplo onde tens 'm' podias ter 'menor'

[*]não é o caso, mas para não teres problemas com buffers no scanf coloca um espaço no começo da string, por exemplo scanf(" %d",&x);

[*]suponho que o valor do vector seja o tamanho... porque que perguntas isso dentro de um ciclo?

[*]já leste isso: printf("introduza os valor do vector a[%d]:\n",i) ?

[*]o programa estoura por causa disso: scanf("a[%d]\n",&a), o scanf não reconhece isso, tinha que ser scanf(" %d",&(a)) não sei se os parênteses depois do '&' são necessários ou não, mas antes a mais que a menos.

[*]normalmente percorre-se um array (vector) com for(i=0;i<n;i++), não sei se é de propósito ou não, mas não estás a preencher a primeira casa: a[0]

[*]o que é suposto isso fazer?? se for ordenar um array, e se quiseres fazer uma coisa a sério, usa quicksort

[*]finalmente, o "system" só é usado em ultimo recurso, usa getchar() para parar a execussão, mas se estás a fazer acho que estas a usar o DevCpp (qqr coisa assim) certo? recomendo vivamente linux para aprender a programar, no começo é difícil, mas depois compensa!

espero ter ajudado

Share this post


Link to post
Share on other sites
Baderous

O teu ponto 6 não é verdade, é possível usar formatação mais complexa do que os simples placeholders dos tipos mais comuns:

#include <stdio.h>

int main(void) {
        int a[10];
        printf("Introduzir valor: ");
        scanf("a[%d]",&a[0]);
        printf("%d\n",a[0]);
        return 0;
}

Introduzir valor: a[4]
4

Edit: O que ele precisa é de retirar o '\n' da string de formato do scanf, fazer limpeza do buffer quando faz leituras e provavelmente corrigir a string de formato no scanf, porque não faz sentido nenhum ler um número como ele está a fazer.

Share this post


Link to post
Share on other sites
m90mine

Como alguem tinha perguntado isto serve para ordenar vectores tipo escolhe-se n numeros de vectores e ele ordena automaticamente

Share this post


Link to post
Share on other sites
m90mine

Ja vi onte esta o erro esta nos ciclos for so que nao consigo corrigir o erro

Share this post


Link to post
Share on other sites
KTachyon

Já toda a gente viu onde está o erro. Corrige os scanf() como foi dito.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
KTachyon

scanf("%d\n",&(a));

Tens o \n a mais. Não é preciso pôr os parentesis à volta do 'a'.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
KTachyon

E o teu a é um array. Se estás a inserir os valores do array nesse for, convém dares a posição do array que pretendes, tal como tinhas antes.

scanf("%d", a[i]);


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
m90mine

se colocar dois numeros de vectores para ele ordenar ele da erro no segundo numero

mas se colocar tres numeros de vectores para ele ordenar ja nao da erro

nao entendo o porque

Share this post


Link to post
Share on other sites
m90mine
#include<stdio.h>
#include<stdlib.h>

main(){
       int a[10],i,j,m,n;
       printf("Introduza o numero do vector:\n");
       scanf("%d",&n);
       
       for(i=1;i<=n;i++)
      
       {
       printf("Introduza os valor do vector a[%d]:\n",i);
       scanf("%d",&a);
       }
       
       for(i=1;i<n-1;i++)
       
       {
       for(j=i+1; j<=n ;j++)
       
       {                 
       if(a[i]>a[j]);
       }
       }

       {
       m=a[i];
       a[i]=a[j];
       a[j]=m;
       }
       
       for(i=1;i<=n;i++)
       
       {
       scanf("%d", a[i]);
       }
       
       system("pause");
       }

Share this post


Link to post
Share on other sites
KTachyon

Continuas a cometer o mesmo erro no segundo scanf():

scanf("%d",&a);


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
m90mine

RSFalcon7

eu coloquei a pergunta "introduza os valor do vector" eu pertendo fazer com que o usuario escolha o numeros e que o programa os colocoque por ordem

Share this post


Link to post
Share on other sites
KTachyon

Por isso é que tens que os atribuir ao espaço do vector correspondente...


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
RSFalcon7

Baderous... realmente não conhecia os "[]" nas formatação, mas pelo que vi aqui não é isso que ele queria...

m90mine... ainda não percebi o que queres fazer, mas o "numero do vector" é o tamanho? se sim, o programa deixa de funcionar para tamanho maior do que 10.

e o "Introduza os valor do vector" tens aí, no mínimo, um erro de português...

para conseguires ler com scanf, se dizes que vais ler um inteiro ("%d") tens que dar um int *,portanto, como já foi dito, tens colocar &a

Share this post


Link to post
Share on other sites
m90mine

A ideia do programa é o utilizador escolher "n" numeros e o programa ordenar automaticamente os numeros de forma crescente

Share this post


Link to post
Share on other sites
KTachyon

Ou seja:

    int i,j,m,n;
    
    printf("introduza o numero do vector:\n");
    scanf("%d",&n);
    
    int a[n];
    
    for(i=1;i<=n;i++) {
        printf("introduza o valor de a[%d]:\n",i);
        scanf("%d",&a[i]);
    }


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
m90mine

É isso so que agora perciso que ele organize  tipo

int vector[5]={10,3,0,15,50}; 
       //posicao 0 = 10
       //posicao 1 = 3
       //posicao 2 = 0
       //posicao 3 = 15
       //posicao 4 = 50
       
       
       int i,y,vect;
       
       int x=5;
       
       
       
       
       
       printf("VECTOR POR ORDENAR\n\n\n");
        
         
       for(i=0;i<x;i++)
       printf("Posicao %d = %d\n",i,vector[i]);
          
   ////////////////////////////////////////////////////////////7
       x--; 
       for(i=0;i<x;i++)              
       for(y=0;y<i;y++)
       if(vector[y]>vector[y+1]){
       vect=vector[y];       
       vector[y]=vector[y+1];
       vector[y+1]=vect;
       }
      
      printf("VECTOR ORDENADO\n\n\n");
        
       
                          
      for(i=0;i<=x;i++)
      
      printf("Posicao %d = %d\n",i,vector[i]);
      printf("\n\n");

Share this post


Link to post
Share on other sites

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
Sign in to follow this  

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