Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bruno Pacheco

[Resolvido] linguagem C - erro no código

Recommended Posts

Estou resolvendo esse problema aqui: "Crie um programa que armazene em um vetor todos os números pares do intervalo fechado de 1a 100. Após isso, o programa deve imprimir todos os valores armazenados. "

 

Meu algoritmo não está compilando e está dando erro na linha do "if". Queria saber o que fazer para funcionar o meu programa?

 

#include<stdio.h>
#include<stdlib.h>
int main(){
    int i, vet[i],j,par[j];
    
    for(i=0;i<100;i++){
       vet[i]=i;
    }
    
    for(i=0;i<100;i++){
                       
        if (vet[i]%2==0){
           par[j]=vet[i];
        }
    j++;    
    }
    
    for(j=0;j<100;j++){;
       printf("%d",par[j]);
    }
    system("Pause");       
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Meu algoritmo não está compilando e está dando erro na linha do "if". Queria saber o que fazer para funcionar o meu programa?

 

Ajuda ler as mensagens do compilador.

 

isis@linux-45c9:~/src> gcc -Wall -Wextra m1.c

m1.c: In function ‘main’:

m1.c:22: warning: control reaches end of non-void function

 

Novamente: warning não é error. O programa não compila quando existem erros e não warnings.

 

isis@linux-45c9:~/src> ./a.out

Falha de segmentação

 

 

(gdb) r

Starting program: /home/isis/src/a.out

 

Breakpoint 1, main () at m1.c:4

4 int i, vet,j,par[j];

2: i = -1208180748

1: j = 134520820

(gdb) s

 

Breakpoint 2, main () at m1.c:6

6 for(i=0;i<100;i++){

2: i = -1208180748

1: j = 134520820

(gdb) s

 

Breakpoint 4, main () at m1.c:7

7 vet=i;

2: i = 0

1: j = 134520820

(gdb) display vet

3: vet = 0xe00d70e0

(gdb) display vet

Disabling display 4 to avoid infinite recursion.

4: vet = Cannot access memory at address 0xe00d70e0

(gdb) s

 

Program received signal SIGSEGV, Segmentation fault.

0x080485a2 in main () at m1.c:7

7 vet=i;

3: vet = 0xe00d70e0

2: i = 0

1: j = 134520820

(gdb) s

 

Program terminated with signal SIGSEGV, Segmentation fault.

The program no longer exists.

 

 

Vou apelar p/ algo chamado progressão aritmética. Sabendo que o primeiro elemento da sequência de pares de 1 a 100 é 2 e o último é 100, temos 50 números pares e o n-ésimo número par pode ser obtido usando 2*n (n>0). Então não tem necessidade de fazer 2 loops p/ armazenar esses números:

 

#include <stdio.h>
int main() {
int vet[50];
int i = 0;

for(;i<50;i++) {
	vet[i] = (i+1)*2;
}

for(i=0;i<50;i++) {
	printf("%d ", vet[i]);
}
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tudo bem valeu voce me mostrou um outro jeito de fazer o programa.

Mas no caso do meu programa que eu estou fazendo aonde está o erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não colei a depuração inteira de enfeite.

Se você se der ao trabalho de ler com atenção, vai notar esse pedaço:

 

Program received signal SIGSEGV, Segmentation fault.

0x080485a2 in main () at m1.c:7

 

Procure a linha 7 do programa e me responda se 'i' tem algum valor quando você declara o array.

 

isis@linux-45c9:~/src> gcc -Wall -Wextra m1.c -O1

m1.c: In function ‘main’:

m1.c:4: warning: ‘i’ is used uninitialized in this function

m1.c:4: warning: ‘j’ is used uninitialized in this function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já consertei o meu código e continua dando erro.No visual studio não aparece nada enquanto no devc++ aparece o resultado contudo mostra tambem uns numeros estranhos.A minha pergunta é o que fazer para que o meu programa funcione?

 

#include<stdio.h>
#include<stdlib.h>
int main(){
    int i, vet[100],j=0,par[100],contpar;
    
    for(i=0;i<100;i++){
       vet[i]=i+1;
    }
    
    for(i=0;i<100;i++){
                       
        if (vet[i]%2==0){
           par[j]=vet[i];
           j++;
           contpar+=1;
        }
        
    }
    
    for(j=0;j<contpar;j++){;
       printf("%d\t",par[j]);
       
    }
    system("Pause");       
}   

Compartilhar este post


Link para o post
Compartilhar em outros sites

De novo: preste atenção no que você escreve.

C não inicializa as variáveis automaticamente.

E o que faz aquele ponto-e-vírgula perdido na chave do for?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.