← Desenvolvimento

Dúvida programa em C

Lida 8713 vezes

Offline

diogoosorio 
Membro
Mensagens 134 Gostos 1
Feedback +1

Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Código: (c) [Seleccione]
#include <stdio.h>
#include <stdlib.h>


double calcularMedia(double notas[3]){
    double mediaTestes = (notas[0] * 0.6) + (notas[1] * 0.4);
    double notaFinal = (mediaTestes * 0.5) + (notas[2] * 0.5);
    return notaFinal;
}


void main(){
    double *notas = malloc(3 * sizeof(double));

    printf("Introduza a nota do teste 1:\n");
    scanf("%d", &notas[0]);

    printf("Introduza a nota do teste 2:\n");
    scanf("%d", &notas[1]);

    printf("Introduza a nota do trabalho:\n");
    scanf("%d", &notas[2]);

    printf("\n\nNota final: %d\n\n", calcularMedia(notas));

    free(notas);
}

Extremamente básico, cheio de buracos e nem sequer experimentar compilar o código.

Um conselho de amigo - programar aprende-se programando (parece uma falácia, mas não é). Se ganhas o hábito de pedires para te fazerem os trabalhos de casa, não vais a lado nenhum.

Para a próxima faz tu o código e apresenta dúvidas especificas. Caso contrário não vais aprender nada.

Fica bem!
Offline

kaydara 
Membro
Mensagens 616 Gostos 1
Feedback +1

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

Código: (c) [Seleccione]
#include <stdio.h>
#include <stdlib.h>


double calcularMedia(double notas[3]){
    double mediaTestes = (notas[0] * 0.6) + (notas[1] * 0.4);
    double notaFinal = (mediaTestes * 0.5) + (notas[2] * 0.5);
    return notaFinal;
}


void main(){
    double *notas = malloc(3 * sizeof(double));

    printf("Introduza a nota do teste 1:\n");
    scanf("%d", &notas[0]);

    printf("Introduza a nota do teste 2:\n");
    scanf("%d", &notas[1]);

    printf("Introduza a nota do trabalho:\n");
    scanf("%d", &notas[2]);

    printf("\n\nNota final: %d\n\n", calcularMedia(notas));

    free(notas);
}

Extremamente básico, cheio de buracos e nem sequer experimentar compilar o código.

Um conselho de amigo - programar aprende-se programando (parece uma falácia, mas não é). Se ganhas o hábito de pedires para te fazerem os trabalhos de casa, não vais a lado nenhum.

Para a próxima faz tu o código e apresenta dúvidas especificas. Caso contrário não vais aprender nada.

Fica bem!

acabas-te de lhe fazer um !(grande favor)
Offline

Luís Marquês 
Membro
Mensagens 1430 Gostos 19
Feedback +27

Troféus totais: 24
Trófeus: (Ver todos)
Apple User Windows User Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1

Ja que fizesteo codigo e como tambei dei C xD Para que serve o "malloc" ?
Offline

asturmas 
Administrador
Mensagens 19734 Gostos 50
Feedback +2

Troféus totais: 39
Trófeus: (Ver todos)
Mobile User Windows User Super Combination Combination Topic Starter 100 Poll Votes 50 Poll Votes 10 Poll Votes Poll Voter Poll Starter

Ja que fizesteo codigo e como tambei dei C xD Para que serve o "malloc" ?
malloc é uma alocação de memoria.. ou seja estas a "criar uma variável" para introduzir conteudo..
Offline

betanalista 
Membro
Mensagens 2564 Gostos 0
Feedback +18

Troféus totais: 26
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Por isso é que os cursos profissionais nem sempre são maus... Eu dei quase meio ano de algoritmia e coisas do genero em papel no 10ºº ano...

a programação que se da nesses cursos é a que eu dei na 1ª semana de aulas


Código: (c) [Seleccione]
#include <stdio.h>
#include <stdlib.h>


double calcularMedia(double notas[3]){
    double mediaTestes = (notas[0] * 0.6) + (notas[1] * 0.4);
    double notaFinal = (mediaTestes * 0.5) + (notas[2] * 0.5);
    return notaFinal;
}


void main(){
    double *notas = malloc(3 * sizeof(double));

    printf("Introduza a nota do teste 1:\n");
    scanf("%d", &notas[0]);

    printf("Introduza a nota do teste 2:\n");
    scanf("%d", &notas[1]);

    printf("Introduza a nota do trabalho:\n");
    scanf("%d", &notas[2]);

    printf("\n\nNota final: %d\n\n", calcularMedia(notas));

    free(notas);
}

Extremamente básico, cheio de buracos e nem sequer experimentar compilar o código.

Um conselho de amigo - programar aprende-se programando (parece uma falácia, mas não é). Se ganhas o hábito de pedires para te fazerem os trabalhos de casa, não vais a lado nenhum.

Para a próxima faz tu o código e apresenta dúvidas especificas. Caso contrário não vais aprender nada.

Fica bem!


função main deve ser sempre do tipo int

o gajo tem 3 aulas e já lhe colocas aqui memoria dinâmica, apontadores e free a memoria?


@Zompixau não vais aprender C a pedir aos outros que te façam as coisas, ou pegas num livro e lês a sintaxe e começas a desenvolver algoritmos ou então nunca lá vais..

Eu aprendi C em duas noites, duas directas seguidas e comecei a gostar da coisa..

Dizem por ai que o problema são os algoritmos? Que dificuldade tem os algoritmos nas primeiras semanas? Saber fazer medias, somar números? O grande problema no inicio é perceber a sintaxe da linguagem de programação, depois é tudo fácil..

Desenvolver algoritmos? Fácil, pega-se num papel e num lápis e riscasse e volta-se a riscar até se chegar lá..
Offline

Pedro Miguel 
Membro
Mensagens 1161 Gostos 25
Feedback +11

Troféus totais: 27
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2

Também estive como tu @Zompixau, aconselho-te a arranjares o livro:LINGUAGEM_C de Luiz Damas. Na semana passada não sabia muita coisa e agora já estou bem melhor.

Boa sorte ;)
Offline

kaydara 
Membro
Mensagens 616 Gostos 1
Feedback +1

Troféus totais: 21
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 500 Posts 100 Posts

Também estive como tu @Zompixau, aconselho-te a arranjares o livro:LINGUAGEM_C de Luiz Damas. Na semana passada não sabia muita coisa e agora já estou bem melhor.

Boa sorte ;)

se souberem ingles há livros de referencia a comprar... sempre são melhores que esse livro dessa editora...
Offline

Pedro Miguel 
Membro
Mensagens 1161 Gostos 25
Feedback +11

Troféus totais: 27
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2

se souberem ingles há livros de referencia a comprar... sempre são melhores que esse livro dessa editora...

Ninguém disse o contrário, disse por ser em português e por me ter ajudado ;)
Offline

Zompixau 
Membro
Mensagens 511 Gostos 0
Feedback +1

Troféus totais: 27
Trófeus: (Ver todos)
Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2 Level 1

Eu não vou pedir para fazerem os meus trabalhos, mas ainda nao dei quase nada.. Ainda estou a tentar ver como é que isto funciona...

Nesse código ainda há coisas que não dei.

Acho mesmo que o mais dificil, como o betanalista diz, é perceber a sintaxe da linguagem.
Offline

AnaMartelo 
Administrador
Mensagens 2071 Gostos 25
Feedback +28

Troféus totais: 29
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2

Eu não vou pedir para fazerem os meus trabalhos, mas ainda nao dei quase nada.. Ainda estou a tentar ver como é que isto funciona...

Nesse código ainda há coisas que não dei.

Acho mesmo que o mais dificil, como o betanalista diz, é perceber a sintaxe da linguagem.

Infelizmente já não tenho comigo, mas tinha um manual de 120 páginas que o meu prof de programação me tinha facultado que era apenas disso, lógica e algoritmos.

Se queres avançar nesse tipo de programação então aconselho-te a perderes umas valentes tardes/noites a estudar essa parte, porque está na base de todas as linguagens. O resto é só conheceres os comandos base e a lógica é sempre a mesma..
Offline

Pedro Miguel 
Membro
Mensagens 1161 Gostos 25
Feedback +11

Troféus totais: 27
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2

Alguém sabe manuais só de lógica e algoritmos (preferencialmente português) ?
Offline

diogoosorio 
Membro
Mensagens 134 Gostos 1
Feedback +1

Troféus totais: 22
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Poll Voter Level 4 Level 3 Level 2 Level 1 100 Posts 50 Posts

Ja que fizesteo codigo e como tambei dei C xD Para que serve o "malloc" ?

http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.13.html#malloc

Se deste C, falaste em apontadores, certo?

Partindo do pressuposto que sim, a função malloc aloca um bloco de memória do tamanho do argumento da função e devolve um apontador para esse bloco de memória.

Memória dinâmica serve, por exemplo, para situações onde não sabes de quanta memória vais precisar. Ou situações onde trabalhas com pouca memória e tens de ter "mão" naquilo que utilizas. Um exemplo (mais uma vez, pode não compilar, não o testei):

Código: (c) [Seleccione]
#include <stdlib.h>
#include <stdio.h>

int main(){
    int *numeros = NULL;
    int nalloc = 0;
    int elementos = 0;
    int x;
    int i;

    // Recolher numeros ate ser introduzido um 999
    while(x != 999){
        fprintf(stdout, "Introduz um numero:\n");
        fscanf(stdin, "%d", &x);

        // Se o tamanho do bloco de memoria for insuficiente, aumentar o tamanho do bloco
        if(elementos >= nalloc){
            nalloc += 10;

            numeros = (int *)realloc((int *)numeros, nalloc * sizeof(int));
            if(numeros == NULL){
                fprintf(stderr, "Esgotei memoria,  %d elementos\n", elementos);
                exit(1);
            }
        }

        numeros[elementos++] = x;
    }


    fprintf(stdout, "Numeros introduzidos:\n");

    for( i = 0; i < elementos; i++){
        fprintf(stdout, "%d, ", numeros[i]);
    }

    // Libertar o bloco de memoria para evitar um (hipotetico) "leak" de memoria
    free(numeros);
}

Repara que o tamanho do bloco de memória vai sendo aumentado consoante vai sendo necessário. Se estiver complicado, diz.


Zompixau, o que tu pediste foi para te fazerem o trabalho de casa. Se o teu problema é a sintaxe, toma: http://www.acm.uiuc.edu/webmonkeys/book/c_guide/

O problema é que isto de aprender a programar dá trabalho. Uma coisa é apresentares dúvidas específicas - outra é pedires para te fazerem o trabalho.

Aposto contigo que se abrires um site como este:

http://www.programmingsimplified.com/c-program-examples

E fizeres algumas experiências, em 2 ou 3 horas tinhas uma solução tua, funcional para o problema que me apresentaste.

Só se aprende a programar dando à unha e batendo (frequentemente) com a cabeça na parede. :)

Neste problema em específico basta-te teres uma noção muito elementar do que é uma variável - inteira e de virgula flutuante -, que operações aritméticas podes fazer e um papel e caneta para resolveres o problema.

Coloca a resolução num papel, vais ver que depois passar para C é peanuts...
Offline

Nastase 
Membro
Mensagens 14 Gostos 0
Troféus totais: 17
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 3 Level 2 Level 1 10 Posts First Post Karma Eighth year Anniversary

Citar
Só se aprende a programar dando à unha e batendo (frequentemente) com a cabeça na parede. :)

Tão mas tão verdade... e continuando na senda das cabeçadas, só depois da testa cravejada de galos é que um gajo lá vai.

Ainda me lembro das horas perdidas por causa de um ponto e vírgula ou dos "terríveis" core dump :)
Offline

Pedro Miguel 
Membro
Mensagens 1161 Gostos 25
Feedback +11

Troféus totais: 27
Trófeus: (Ver todos)
Apple User Super Combination Combination Topic Starter 10 Poll Votes Poll Voter Level 5 Level 4 Level 3 Level 2

Já agora para windows que programas para C me aconselham ? (compilação, terminal,editor)
Offline

Nastase 
Membro
Mensagens 14 Gostos 0
Troféus totais: 17
Trófeus: (Ver todos)
Super Combination Combination Topic Starter Level 3 Level 2 Level 1 10 Posts First Post Karma Eighth year Anniversary

Para C já não programo há bastante tempo mas na altura era Eclipse CDT (www.eclipse.org/cdt/)