Bem-vindo: Sáb, 30 de Novembro 2024, 11:42 Pesquisa avançada

Estudo da linguagem c

Escreveu alguma aplicação ou script que quer partilhar? Ou conhece algo que quer partilhar? Sabe alguma linguagem de programação e quer partilhar esse conhecimento com um tutorial? Tem alguma dúvida em alguma linguagem? Então este é o sítio certo.

Estudo da linguagem c

Mensagempor jose sousa » Seg, 20 de Agosto 2012, 19:17

Boa tarde, a todos,
Para quem está a estudar, ou pretende iniciar o estudo nesta linguagem de programação, apresento um problema, seguido do código fonte, que é o seguinte:
Pretende-se determinar o volume de um cone. Escreva um programa em C que satisfaça o pedido.

Apresento o código fonte:
Código: Selecionar todos
/*             
  Escrito no Ubuntu 12.04 linux, com o editor gedit e o compilador gcc.
  Realizado em Agosto de 2012 por: José Sousa*/
#include <stdio.h>
main()
{       
    printf("***calculo do Volume de um cone em cm***\n");
    float r,h,v; // r=raio, h=altura, v=volume
    float pi=3.1416;
    printf("Escreva a altura do cone h a calcular em cm:");
    scanf("%f", &h);
    printf("Escreva o raio do cone r a calcular em cm:");
    scanf("%f",&r);
    v=(1/3.0)*pi*(r*r)*h;
    printf("\n O Volume do cone  e': %.f cm ",v);         
}
Avatar do usuário
jose sousa
 
Mensagens: 18
Registrado em: 19 Agosto, 2012
Localização: Porto-Portugal

Re: Estudo da linguagem c

Mensagempor Luis Cardoso » Seg, 20 de Agosto 2012, 19:48

Olá José, boa iniciativa :yeah:
Apenas lhe pedia para usar as tags [ code ]



Minha solução:
Código: Selecionar todos
/*******************************************************************************
* Escrito no Ubuntu 12.04 linux, com o editor gedit e o compilador gcc.        *
* Realizado em Agosto de 2012 por: José Sousa                                  *
* Reescrito em Agosto de 2012 por: Luís Cardoso                                *
*******************************************************************************/
#include <stdio.h>

#define PI 3.141592654
#define VOLUME_CONE(R,H) (1/3.0)*PI*(R*R)*H

main()
{
    printf("***calculo do Volume de um cone em cm***\n");
    float r,h; // r=raio, h=altura
    printf("Escreva a altura do cone h a calcular em cm:");
    scanf("%f", &h);
    printf("Escreva o raio do cone r a calcular em cm:");
    scanf("%f",&r);
    printf("\n O Volume do cone e': %f cm \n", VOLUME_CONE(r,h));
}

Como compilar? Simples, basta fazer:
gcc -o main main.c

Depois para executar:
./main
ImagemImagem
«Escolhe um trabalho de que gostes, e não terás que trabalhar um só dia na tua vida» - Confúcio
Avatar do usuário
Luis Cardoso
Redator
 
Mensagens: 10455
Registrado em: 26 Maio, 2011
Localização: Portugal

Re: Estudo da linguagem c

Mensagempor jose sousa » Seg, 20 de Agosto 2012, 20:15

Boa tarde, Luís Cardoso, ainda estou a testar a melhor forma de postar os códigos e texto sobre a matéria de programação. Obrigado pela correcção ao meu código, sempre tem outra apresentação.Apresento outro código para testar a solução que me deu.
O programa seguinte é: Escreva um programa que determine o perímetro e área de uma circunferência cujo raio é definido pelo utilizador.
Código: Selecionar todos
/*             
  Escrito no Ubuntu 12.04 linux, com o editor gedit e o compilador gcc.
  Realizado em Agosto de 2012 por: José Sousa*/
#include <stdio.h>
main()
{       
    printf("***calculo de area e de perimetro de uma circunferencia em cm***\n");
    float r,a,p; // r=raio, a=area, p=perimetro
    float pi=3.1416;
    printf("Introduza um raio em cm para calcular:");
    scanf("%f",&r);
    a=pi*r*r;
    p=(2*pi)*r;
    printf("\n A area e': %.2f cm\n\n O perimetro e': %.2f cm\n",a,p);
    printf("\n**********************************************************************\n");
       
}

Edite no gedit e guarde o programa com o nome: exerc15.c
Para compilar escreva:
gcc -o exerc15 exerc15.c

Para executar escreva:
./exerc15


Cumprimentos
José Sousa
Editado pela última vez por jose sousa em Seg, 20 de Agosto 2012, 21:25, em um total de 2 vezes.
Avatar do usuário
jose sousa
 
Mensagens: 18
Registrado em: 19 Agosto, 2012
Localização: Porto-Portugal

Re: Estudo da linguagem c

Mensagempor Luis Cardoso » Seg, 20 de Agosto 2012, 21:16

jose sousa (20-08-2012, 20:15) escreveu:Boa tarde, Luís Cardoso, ainda estou a testar a melhor forma de postar os códigos e texto sobre a matéria de programação. Obrigado pela correcção ao meu código, sempre tem outra apresentação.Apresento outro código para testar a solução que me deu.
Spoiler:
Código: Selecionar todos
/*             
  Escrito no Ubuntu 12.04 linux, com o editor gedit e o compilador gcc.
  Realizado em Agosto de 2012 por: José Sousa*/
#include <stdio.h>
main()
{       
    printf("***calculo de area e de perimetro de uma circunferencia em cm***\n");
    float r,a,p; // r=raio, a=area, p=perimetro
    float pi=3.1416;
    printf("Introduza um raio em cm para calcular:");
    scanf("%f",&r);
    a=(2*pi)*r*r;
    p=(2*pi)*r;
    printf("\n A area e': %.2f cm\n\n O perimetro e': %.2f cm\n",a,p);
    printf("\n**********************************************************************\n");
       
}

Saudações Académicas,
José Sousa

Eu na minha resposta sugeri que usasse a tag, mas o código que apresentei era para ser visto como uma alternativa à sua e não uma correcção! ;)



Recomendo que use:
Código: Selecionar todos
#define PI 3.1416

Porquê? Porque se fizer uso de funções, o valor de π (PI) não precisa de ser passado como parâmetro para a função.

Exemplo de uma forma alternativa:
Código: Selecionar todos
/*
  Escrito no Ubuntu 12.04 linux, com o editor gedit e o compilador gcc.
  Realizado em Agosto de 2012 por: José Sousa
  Reescrito em Agosto de 2012 por: Luís Cardoso*/
 
#include <stdio.h>

#define PI 3.1416

// Declaração das funções
float calcula_area(float );
float calcula_perimetro(float );

main()
{   
    printf("***calculo de area e de perimetro de uma circunferencia em cm***\n");
    float r; // r=raio
    printf("Introduza um raio em cm para calcular:");
    scanf("%f",&r);
    printf("\n A area e': %.2f cm2\n\n O perimetro e': %.2f cm\n",calcula_area(r),calcula_perimetro(r));
    printf("\n**********************************************************************\n");   
}

// Implementação das funções
float calcula_area(float r)
{
    return PI*r*r;
}

float calcula_perimetro(float r)
{
    return 2.0*PI*r;
}


Entretanto notei num erro, o cálculo da área está errado. O correcto é:
π·r²



Nota: Onde se vê cm2 é para ser entendido como cm²
ImagemImagem
«Escolhe um trabalho de que gostes, e não terás que trabalhar um só dia na tua vida» - Confúcio
Avatar do usuário
Luis Cardoso
Redator
 
Mensagens: 10455
Registrado em: 26 Maio, 2011
Localização: Portugal

Re: Estudo da linguagem c

Mensagempor jose sousa » Seg, 20 de Agosto 2012, 21:29

Obrigado luís Cardoso, no entanto já corregi o erro. Este editor tem alguma funcionalidades interessantes, que vou explorar melhor.No entanto para calcular o perímetro usou 2.0*PI*r. A questão que coloco é a seguinte: Porque usou 2.0*PI em vez de 2*PI? Qual é a diferença?
Já testei com 2.0*PI e com 2*PI e obtenho o mesmo resultado.
Cumprimentos,
José Sousa
Avatar do usuário
jose sousa
 
Mensagens: 18
Registrado em: 19 Agosto, 2012
Localização: Porto-Portugal

Re: Estudo da linguagem c

Mensagempor Bitetti » Ter, 21 de Agosto 2012, 12:39

Pegando o bonde andando em um momento troll eu diria pra usar
Código: Selecionar todos
#include <math.h>
static const double PI = atan(1)*4;

Assim você tem PI com o máximo de precisão que o ambiente pode lhe dar. Float nem consegue atender uma tela de monitor LCD atual se vc estiver trabalhando com proporções.

Ps.: 2.0 no lugar do 2 é para garantir q o compilador use um valor double e não int para não correr o risco de fazer cast. Mesmo o compilador sendo esperto não é bom ficar confiando.
:troll:
Avatar do usuário
Bitetti
 
Mensagens: 875
Registrado em: 03 Janeiro, 2012
Localização: São Paulo

Re: Estudo da linguagem c

Mensagempor Luis Cardoso » Ter, 21 de Agosto 2012, 13:54

jose sousa (20-08-2012, 21:29) escreveu:Obrigado luís Cardoso, no entanto já corregi o erro. Este editor tem alguma funcionalidades interessantes, que vou explorar melhor.No entanto para calcular o perímetro usou 2.0*PI*r. A questão que coloco é a seguinte: Porque usou 2.0*PI em vez de 2*PI? Qual é a diferença?
Já testei com 2.0*PI e com 2*PI e obtenho o mesmo resultado.
Cumprimentos,
José Sousa

Essa observação do 2.0 em vez de 2, tem com o facto de haver compiladores que não lidam bem quando se está a realizar operações entre elementos de diferentes tipos: char, int, float, etc.

Se o José for ver o código em Assembly (sim, eu sei que não é uma linguagem muito "bonita", mas é melhor do que ir aos OPCodes xD) produzido por uma maneira e pela outra veria que isso faria toda a diferença!

Que diferença faz nos computadores actuais? Nenhuma! Que diferença fazia nos computadores de há 20 anos? Muita, era a diferença entre terminar em 5 dias ou em 10 (tendo em conta que a programação mais usada era a de cartões perfurados e com utilização de Fortran)!
ImagemImagem
«Escolhe um trabalho de que gostes, e não terás que trabalhar um só dia na tua vida» - Confúcio
Avatar do usuário
Luis Cardoso
Redator
 
Mensagens: 10455
Registrado em: 26 Maio, 2011
Localização: Portugal

Re: Estudo da linguagem c

Mensagempor jose sousa » Ter, 21 de Agosto 2012, 21:31

Boa noite, Luís Cardoso, obrigado pela sua resposta e pela dica. Em comentário de eu não usar funções; Achei que não devia usar devido ao programa ser simples, e também para não complicar, pois a minha intenção foi também usar este programa para quem está a iniciar nesta matéria, de certa forma concordo com a implementação de funções assim como definir as váriáveis globais.
Tenho uma cadeira de sistemas operativos onde também programo em ASM, Assembly, pois como disse a maior parte das pessoas não gostam, mas quando se está a estudar esta matéria tem de se gostar.
Cumprimentos,
José Sousa
Avatar do usuário
jose sousa
 
Mensagens: 18
Registrado em: 19 Agosto, 2012
Localização: Porto-Portugal

Re: Estudo da linguagem c

Mensagempor jose sousa » Ter, 21 de Agosto 2012, 21:41

Bitetti (21-08-2012, 12:39) escreveu:Pegando o bonde andando em um momento troll eu diria pra usar
Código: Selecionar todos
#include <math.h>
static const double PI = atan(1)*4;

Assim você tem PI com o máximo de precisão que o ambiente pode lhe dar. Float nem consegue atender uma tela de monitor LCD atual se vc estiver trabalhando com proporções.

Ps.: 2.0 no lugar do 2 é para garantir q o compilador use um valor double e não int para não correr o risco de fazer cast. Mesmo o compilador sendo esperto não é bom ficar confiando.
:troll:

Boa noite, Bitetti, obrigado pelo seu comentário e pela dica. Neste caso como escrevi o programa em Linux e sendo um programa de estudo e de prática, decidi escrever de uma forma simples, para que todos possam entender esta linguagem de programação.
Cumprimentos,
José Sousa
Avatar do usuário
jose sousa
 
Mensagens: 18
Registrado em: 19 Agosto, 2012
Localização: Porto-Portugal

Re: Estudo da linguagem c

Mensagempor Luis Cardoso » Ter, 21 de Agosto 2012, 22:00

jose sousa (21-08-2012, 21:31) escreveu:Boa noite, Luís Cardoso, obrigado pela sua resposta e pela dica. Em comentário de eu não usar funções; Achei que não devia usar devido ao programa ser simples, e também para não complicar, pois a minha intenção foi também usar este programa para quem está a iniciar nesta matéria, de certa forma concordo com a implementação de funções assim como definir as váriáveis globais.
Tenho uma cadeira de sistemas operativos onde também programo em ASM, Assembly, pois como disse a maior parte das pessoas não gostam, mas quando se está a estudar esta matéria tem de se gostar.
Cumprimentos,
José Sousa

Pois, eu também era para ter tido uma cadeira assim de Sistemas Operativos, pois tenho formação em Engenharia Electrotécnica e de Computadores, mas devido ao processo de Bolonha, ela desapareceu... :cry:

O Assembly que usei foi para programar o Intel 8085 e um Atmel (se não estou em erro foi o AV90S2313). No Intel programei uma calculadora, realizei operações com recurso a acesso à memória externa e por fim criei um mini sistema, em que lendo os dados na memória ROM, realizava operações e em caso de ser necessário guardar dados, enviava para a RAM. No Atmel, foi para criar filtros digitais, leitura/escrita em memória, interacção com periféricos, como por exemplo interruptores, LED, sensores, LCD, etc.
ImagemImagem
«Escolhe um trabalho de que gostes, e não terás que trabalhar um só dia na tua vida» - Confúcio
Avatar do usuário
Luis Cardoso
Redator
 
Mensagens: 10455
Registrado em: 26 Maio, 2011
Localização: Portugal

Próximo

Voltar para Scripts, programação e aplicações em desenvolvimento

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes