Ir ao conteúdo
  • Cadastre-se

C básico em c (funções)


Vulgo_Lobo

Posts recomendados

Bom dia/tarde/noite, eu aqui novamente para perguntar sobre o básico do C. Consegui fazer a primeira função funcionar, ela calcula media de 4 notas colocadas, mas quando tento imprimir a segunda função na main ele fica assim: 

Média das notas: 8.00

Reprovado

 

Que no caso era pra estar aprovado kkkkkk 

código que eu fiz, certeza que é erro de sintaxe.

#include <stdio.h>

float par(float n, float m, float p, float q){
    return ((n+m+p+q) /4);
}

float pos(float n, float m, float p, float q){
    float x;
    int id;
    x = par(n,m,p,q);
    if (x > 6)
    id = 1;
    if (x<6 && 5<x)
    id = 2;
    else 
    id = 3;
    
    return id;
}
main()
{
    float n,m,p,q;
    int id;

    printf("Digite as notas: ");
    scanf("%f \n\n%f \n\n%f \n\n%f",&n, &m, &p, &q);
    
    printf ("Média das notas: %.2f", par(n,m,p,q));  //comprova de que função media
    
    
    id = pos(n,m,p,q);
    if (id == 1)
    printf ("\nSituacao: Aprovado");
    if (id == 2)
    printf ("\nSituacao: Dependencia");
    else
    printf ("\nSituacao: Reprovado");
    
    
return 0;
}

 

Link para o comentário
Compartilhar em outros sites

@Vulgo_Lobo Olhe aqui:

35 minutos atrás, Vulgo_Lobo disse:

if (x > 6)
id = 1;
if (x<6 && 5<x)
id = 2;
else 
id = 3;

Se a média for maior que 6, o aluno é aprovado, se for menor que 6 e maior que 5, fica de recuperação, e caso contrário, é reprovado, ou seja, caso a nota seja igual a 6 ou menor ou igual a 5. Isso está errado.

O certo seria, na primeira condição, caso a nota seja maior ou igual (>=) a 6, o aluno é aprovado.

Aliás, se você quer avaliar mais de uma condição, a partir da segunda já use else if() ao invés de apenas if().

 

40 minutos atrás, Vulgo_Lobo disse:

scanf("%f \n\n%f \n\n%f \n\n%f",&n, &m, &p, &q);

O que é isso? Pra que todos esses espaços e \n's? Você só está lendo variáveis do tipo float, se colocar 4 %f's seguidos não vai dar problema nenhum, o scanf() só vai ler os números.

 

Por fim, corrija aí o tipo da função pos(). Você está retornando um int, ela deve ser do tipo inteiro.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Já pensou em mostrar as notas lidas, logo depois que leu?

 

E em mostrar a média calculada logo no retorno de pos()?

 

Assim você vai se certificando do que está fazendo...

 

você retorna um int de pos(), 1, ,2 ou 3. Não deve declarar o retorno como float.

 

declare o simples

 

int pos(float, float, float, float);

Que pretende com essa linha:

    scanf("%f \n\n%f \n\n%f \n\n%f", &n, &m, &p, &q);

Pode usar só

    scanf("%f%f%f%f", &n, &m, &p, &q);

Deixe main() sempre como a primeira função de seu programa  não a última. Use protótipos para as funções no começo...

 

Assim por exemplo

#include <stdio.h>

float par(float, float, float, float);
int pos(float, float, float, float);

main()
{
    float n, m, p, q;
    int id;

    printf("Digite as notas: ");
    scanf("%f \n\n%f \n\n%f \n\n%f", &n, &m, &p, &q);

    printf("Média das notas: %.2f", par(n, m, p, q));  //comprova de que função media


    id = pos(n, m, p, q);
    if (id == 1)
        printf("\nSituacao: Aprovado");
    if (id == 2)
        printf("\nSituacao: Dependencia");
    else
        printf("\nSituacao: Reprovado");


    return 0;
}

float par(float n, float m, float p, float q) {
    return ((n + m + p + q) / 4);
}

int pos(float n, float m, float p, float q) {
    float x;
    int id;
    x = par(n, m, p, q);
    if (x > 6)
        id = 1;
    if (x < 6 && 5 < x)
        id = 2;
    else
        id = 3;
    return id;
}

É melhor para você e para quem tentar ler seus programas.

 

Em pos() você pode escrever o mais simples

int pos(float n, float m, float p, float q) {
    float x = par(n, m, p, q);
    if (x > 6) return 1;
    if (x < 6 && 5 < x) return 2;
    return 3;
}

retornando assim que tiver um resultado, ao invés de 

int pos(float n, float m, float p, float q) {
    float x;
    int id;
    x = par(n, m, p, q);
    if (x > 6)
        id = 1;
    if (x < 6 && 5 < x)
        id = 2;
    else
        id = 3;
    return id;
}

Muito mais difícil de ler

adicionado 1 minuto depois

E como @Lucca Rodrigues disse, suas condições de teste na função pos()  estão assim.. folclóricas. Melhor rever como ele disse ;) 

  • Curtir 2
  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

@Lucca Rodrigues Cara, to tanta horas resolvendo diversos atrasos de lista de atividades em c(retomamos atividades agora em agosto) que estou deixando passar detalhes bobos, realmente pequei muito até mesmo no básico, valeu pela ajuda!!

 

@arfneto não conhecia o uso do return dessa forma, aprendi muito vendo código que você implementou, muitíssimo obrigado!!!

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Prezados, boa noite.

Preciso passar este conteúdo para linguagem C.

Alguém se dispõe?:

Regra de execução: var pCompra: Float; barraCompra: integer; stopLoss: Float; alvo: Float; Inicio Se (IsBought) então Inicio SellToCoverStop(alvo, alvo); SellToCoverStop(stopLoss, stopLoss); Fim Senão Inicio Se (Minima< lowest(Low,2)[1]) e (fechamento > fechamento[1]) e (fechamento>media(20,close)) então BuyStop(maxima,maxima); barraCompra:= CurrentBar; pCompra:= maxima; stopLoss:= lowest(Low,2) ; alvo:= (pCompra+(pCompra - stopLoss)*2); Fim; Fim;

  • Confuso 1
Link para o comentário
Compartilhar em outros sites

@Cobi O que isso tem a ver com o tópico?

E outra, ninguém está aqui para fazer o seu trabalho, portanto, mostre o que tentou fazer que tentaremos ajudar.

Além do mais, use essa ferramenta aqui para postar códigos:

image.png.b39cd987e9b6479c2ff67baf76932fe4.png

 

Crie um novo tópico, mostre o que tentou fazer e pergunte.

Link para o comentário
Compartilhar em outros sites

1 minuto atrás, Lucca Rodrigues disse:

@Eliézer Barros Novamente, não tem nada a ver com esse tópico.

E de novo, ninguém está aqui para fazer o seu trabalho, mostre o que tentou fazer, mas em outro tópico, criado por você.

Ok. Peço perdão por isso.
Não quero que ninguém faça meu trabalho. Estou com dificuldades em fazer a matriz ler o que eu quero. Mas pode deixar que tentarei aqui. 
Obrigado pela atenção.

  • Confuso 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...