• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Alcap

[C] FragaConverter - Conversor de unidades

7 mensagens neste tópico

Boas,

Criei este conversor para ajudar os tradutores da docsPT, uma equipa de traduçao de documentarios que ajudei a criar, e depois de completo pensei: E que tal postar este conjunto de printf's no portugal-a-programar para toda a gente ver que sou um grande nabo!

E pronto, ca esta ele. Espero que gostem, e ja agora, acham que era util incluir as funçoes que criei para converter numa biblioteca?

Fica aqui o codigo:

/*FragaConverter - Conversor 
Copyright (C) 2006  Tiago Cerqueira

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void toneladastonb();
void tonsbtoneladas();
void toneladastons();
void tonstoneladas();
void quiloslibras();
void librasquilos();
void gramasoncas();
void oncasgramas();
void menu_peso();
void quilometrosmilhas();
void milhasquilometros();
void centimetrospolegadas();
void polegadascentimetros();
void metrospes();
void pesmetros();
void voltar_menu_medidas();
void voltar_menu_pesos();
void jardasmetros();
void metrosjardas();
void menu_temperaturas();
void menu_medidas();
void menu_principal();
void centigradostofahrenheit();
void centigradostokelvin();
void fahrenheittokelvin();
void fahrenheittocentigrados();
void kelvintofahrenheit();
void kelvintocentigrados();
void voltar_menu_temperaturas();
void voltar_menu_principal();

char escolha;
int escolha_menu;

/***************************************
*Funçao responsavel pelo menu principal*
****************************************/
void menu_principal()
{
printf("\t\t\t*********************************\n\t\t\t*\tMENU PRINCIPAL\t\t*\n\t\t\t*********************************\n");
printf("\nO que e que deseja converter?\n\n1-Unidades de Temperaturas\n2-Unidades de Medida\n3-Unidades de Peso\n4-Sobre\n5-Sair\n\nOpcao: "); 
scanf("%d", &escolha_menu);
      switch(escolha_menu)
      {
       case 1 : system("cls"); menu_temperaturas(); break;
       case 2 : system("cls"); menu_medidas(); break;
       case 3 : system("cls"); menu_peso(); break;
       case 4 : system("cls"); printf("\t\t\t*********************************\n\t\t\t*\t\tLicenca\t\t*\n\t\t\t*********************************\n\nFragaConverter - Conversor\nCopyright (C)2006 Tiago Cerqueira\n\nEste programa e software livre; voce pode redistribui-lo e/ou modifica-lo sob os termos da GNU General Public License, conforme publicada pela Free Software Foundation; tanto a versao 2 da Licenca como qualquer versao mais actual.\nEste programa e distribuido na expectativa de ser util, mas SEM QUALQUER GARANTIA; incluindo as garantias implicitas de COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM PARTICULAR. Consulte a GNU General Public License para obter mais detalhes.\nVoce deve ter recebido uma copia da GNU General Public License em conjunto com este programa; caso contrario, escreva para a Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.\n\nContacto do Autor: tmafcerqueira@gmail.com\n\n");voltar_menu_principal(); break;
       case 5 : break;
       default: system("cls"); printf("Opcao Invalida"); sleep(2500); menu_principal();
      }
}     


/**********************************************************
*Funçao para voltar ao menu depois de converter as medidas*
***********************************************************/
void voltar_menu_medidas()
{
char sim_nao;
printf("\nDeseja voltar ao menu(S/N)? "); 
fflush(stdin);
scanf("%c", &sim_nao);
      switch (sim_nao)
      {
      case 'S' :
      case 's' : system("cls");menu_medidas();
      case 'n' :
      case 'N' : exit(0);
      default  : system("cls"); printf("Opcao Invalida"); sleep(2500); menu_medidas();
      }
}
/***********************************************************************************
*Função para perguntar se deseja voltar ao menu de peso depois da conversao        *
************************************************************************************/
void voltar_menu_pesos()
{
char sim_nao;
printf("\nDeseja voltar ao menu(S/N)? ");
fflush(stdin);
scanf("%c", &sim_nao);
      switch (sim_nao)
      {
      case 'S' :
      case 's' : system("cls");menu_peso();
      case 'n' :
      case 'N' : exit(0);
      default  : system ("cls"); printf("Opcao Invalida"); sleep(2500); menu_peso();
      }
}
/***********************************************************************************
*Função para perguntar se deseja voltar ao menu de temperaturas depois da conversao*
************************************************************************************/
void voltar_menu_temperaturas()
{
char sim_nao;
printf("\nDeseja voltar ao menu(S/N)? "); 
fflush(stdin);
scanf("%c", &sim_nao);
      switch (sim_nao)
      {
      case 'S' :
      case 's' : system("cls"); menu_temperaturas();
      case 'n' :
      case 'N' : exit(0);
      }
}

void voltar_menu_principal()
{
char sim_nao;
printf("\nDeseja voltar ao menu(S/N)? "); 
fflush(stdin);
scanf("%c", &sim_nao);
      switch (sim_nao)
      {
      case 'S' :
      case 's' : system("cls"); menu_principal();
      case 'n' :
      case 'N' : exit(0);
      }
}
/**************************************************
*Funçao responsavel pelo menu das unidades de peso*
***************************************************/
void menu_peso()
{
int opcao_peso;
printf("\t\t\t*****************************************\n\t\t\t*\tMENU DAS UNIDADES DE PESO\t*\n\t\t\t*****************************************\n");
printf("\n1-Oncas para Gramas\n2-Gramas para Oncas\n3-Libras para Quilogramas\n4-Quilogramas para Libras\n5-Toneladas (EUA) para Toneladas\n6-Toneladas para Toneldas EUA\n7-Toneladas(Ingl.) para Toneladas\n8-Toneladas para Toneladas (Ingl.)\n9-Voltar ao Menu Principal\n10-Sair do Programa\n\nOpcao: ");
scanf("%d", &opcao_peso);
            switch(opcao_peso)
            {
            case 1 : system("cls"); oncasgramas(); voltar_menu_pesos(); break;
            case 2 : system("cls"); gramasoncas(); voltar_menu_pesos(); break;
            case 3 : system("cls"); librasquilos(); voltar_menu_pesos(); break;
            case 4 : system("cls"); quiloslibras(); voltar_menu_pesos(); break;
            case 5 : system("cls"); tonstoneladas(); voltar_menu_pesos(); break;
            case 6 : system("cls"); toneladastons(); voltar_menu_pesos(); break;
            case 7 : system("cls"); tonsbtoneladas(); voltar_menu_pesos(); break;
            case 8 : system("cls"); toneladastonb(); voltar_menu_pesos(); break;
            case 9 : system("cls"); menu_principal(); break;
            case 10: exit(0);
            default: system("cls"); printf("Opcao Invalida!!!\n"); sleep(2500);system("cls"); menu_peso ();
            }
}
/******************************************************
*Funçao responsavel pelo menu das escalas de distancia*
*******************************************************/
void menu_medidas()
{
int opcao_medidas;
printf("\t\t\t*****************************************\n\t\t\t*\tMENU DAS ESCALAS DE MEDIDA\t*\n\t\t\t*****************************************\n");
printf("\n1-Jardas para Metros\n2-Metros para Jardas\n3-Pes para Metros\n4-Metros para Pes\n5-Polegadas (Inches) para Centimetros\n6-Centimetros para Polegadas (Inches)\n7-Milhas para Quilometros\n8-Quilometros para Milhas\n9-Voltar ao menu principal\n10-Sair do programa\n\nOpcao: ");
scanf("%d", &opcao_medidas);
switch(opcao_medidas)
      {
      case  1  : system("cls"); jardasmetros(); voltar_menu_medidas(); break;
      case  2  : system("cls"); metrosjardas(); voltar_menu_medidas(); break;
      case  3  : system("cls"); pesmetros(); voltar_menu_medidas(); break;
      case  4  : system("cls"); metrospes(); voltar_menu_medidas(); break;
      case  5  : system("cls"); polegadascentimetros(); voltar_menu_medidas(); break;
      case  6  : system("cls"); centimetrospolegadas(); voltar_menu_medidas(); break;
      case  7  : system("cls"); milhasquilometros(); voltar_menu_medidas(); break;
      case  8  : system("cls"); quilometrosmilhas(); voltar_menu_medidas(); break;
      case  9  : system("cls"); menu_principal(); break;
      case 10  : exit(0);
      default  : system("cls"); printf("Opcao Invalida!!!\n"); sleep(2500);system("cls"); menu_medidas();
      }
}

/**********************************************
*Funçao responsavel pelo menu das temperaturas*
***********************************************/
void menu_temperaturas()
{
printf("\t\t*************************************************\n\t\t*\tMENU DAS ESCALAS DE TEMPERATURA\t\t*\n\t\t*************************************************\n");
printf("Deseja converter:\n\n1-Kelvin para Centigrados\n2-Kelvin para Fahrenheit\n3-Fahrenheit para Centigrados\n4-Fahrenheit para Kelvin\n5-Centigrados para Kelvin\n6-Centigrados para Fahrenheit\n7-Voltar ao Menu Principal\n8-Sair do programa\n\nOpcao: ");
scanf("%d", &escolha);
         switch(escolha)
         {
         case  1  : system("cls"); kelvintocentigrados(); voltar_menu_temperaturas(); break;
         case  2  : system("cls"); kelvintofahrenheit(); voltar_menu_temperaturas(); break;
         case  3  : system("cls"); fahrenheittocentigrados(); voltar_menu_temperaturas(); break;
         case  4  : system("cls"); fahrenheittokelvin(); voltar_menu_temperaturas(); break;
         case  5  : system("cls"); centigradostokelvin(); voltar_menu_temperaturas(); break;
         case  6  : system("cls"); centigradostofahrenheit(); voltar_menu_temperaturas(); break;
         case  7  : system("cls"); menu_principal();
         case  8  : exit(0);
         default  : system("cls"); printf("Opcao Invalida!!!\n"); sleep(2500);system("cls"); menu_temperaturas();
         }
}

main()
{do
{
menu_principal();
}
while (escolha_menu != 5);
}

/************************
*Kelvin para Centigrados*
*************************/
void kelvintocentigrados()
{
float kelvin, kelvin_centigrados;
printf("\t\t*************************************************\n\t\t*\t\tKelvin para Centigrados\t\t*\n\t\t*\t\t(Kelvin=Centigrados+273)\t*\n\t\t*************************************************\n\n");
printf("Indique a temperatura em graus Kelvin: "); scanf("%f", &kelvin);
kelvin_centigrados=kelvin-273;
printf("A temperatura em graus Centigrados e de: %.1f Centigrados", kelvin_centigrados);
}

/***********************
*Kelvin para Fahrenheit*
************************/
void kelvintofahrenheit()
{
float kelvin, kelvin_fahrenheit;
printf("\t\t*************************************************\n\t\t*\t\tKelvin para Fahrenheit\t\t*\n\t\t*\t(Fahrenheit=[Kelvin-273]x1.8+32)\t*\n\t\t*************************************************\n\n");
printf("Indique a temperatura em graus Kelvin: "); scanf("%f", &kelvin);
kelvin_fahrenheit=(kelvin-273)*1.8+32;
printf("A temperatura em graus Fahrenheit e de: %.1f Fahrenheit",kelvin_fahrenheit);
}
/****************************
*Fahrenheit para Centigrados*
*****************************/
void fahrenheittocentigrados()
{
float fahrenheit, fahrenheit_centigrados;
printf("\t\t*************************************************\n\t\t*\tFahrenheit para Centigrados\t\t*\n\t\t*\t(Centigrados=[Fahrenheit-32]/1.8)\t*\n\t\t*************************************************\n\n");
printf("Indique a temperatura em graus Fahrenheit: "); scanf("%f", &fahrenheit);
fahrenheit_centigrados=(fahrenheit-32)/1.8;
printf("A temperatura em graus Centigrados e de: %.1f Centigrados", fahrenheit_centigrados);
}
/***********************
*Fahrenheit para Kelvin*
************************/
void fahrenheittokelvin()
{

float fahrenheit, fahrenheit_kelvin;
printf("\t\t*************************************************\n\t\t*\t\tFahrenheit para Kelvin\t\t*\n\t\t*\t(Kelvin=[Fahrenheit-32]/1.8+273)\t*\n\t\t*************************************************\n\n");
printf("Indique a temperatura em graus Fahrenheit: "); scanf("%f", &fahrenheit);
fahrenheit_kelvin=(fahrenheit-32)/1.8+273;
printf("A temperatura em graus Kelvin e de: %.1f Kelvin", fahrenheit_kelvin);
}

/************************
*Centigrados para Kelvin*
*************************/
void centigradostokelvin()
{
float centigrados_kelvin, centigrados;
printf("\t\t*************************************************\n\t\t*\t\tCentigrados para Kelvin\t\t*\n\t\t*\t\t(Kelvin=Centigrados+273)\t*\n\t\t*************************************************\n\n");
printf("Indique a temperatura em graus Centigrados: "); scanf ("%f", &centigrados);
centigrados_kelvin=centigrados+273;
printf("A temperatura em Kelvin e de: %.1f Kelvin", centigrados_kelvin);
}

/****************************
*Centigrados para Fahrenheit*
*****************************/
void centigradostofahrenheit()
{
float centigrados, centigrados_fahrenheit;
printf("\t\t*************************************************\n\t\t*\tCentigrados para Fahrenheit\t\t*\n\t\t*\t(Fahrenheit=[Centigradosx1.8]+32)\t*\n\t\t*************************************************\n\n");
printf("Indique a temperatura em graus Centigrados: "); scanf ("%f", &centigrados);
centigrados_fahrenheit=centigrados*1.8+32;
printf("A temperatura em Fahrenheit e de: %.1f Fahrenheit", centigrados_fahrenheit);
}

/*******************
*Metros para Jardas*
********************/
void metrosjardas()
{
float metros, metros_jardas;
printf("\t\t*************************************************\n\t\t*\t\tMetros para Jardas\t\t*\n\t\t*\t\t(Metros x 1.094=Jardas)\t\t*\n\t\t*************************************************\n\n");
printf("Insira a medida em Metros: "); scanf("%f", &metros);
metros_jardas=metros*1.094;
printf("A medida em Jardas e de: %.2f Jardas", metros_jardas);
}
/*******************
*Jardas para Metros*
********************/
void jardasmetros()
{
float jardas, jardas_metros;
printf("\t\t*************************************************\n\t\t*\t\tJardas para Metros\t\t*\n\t\t*\t\t(Jardas x 0.9144=Metros)\t*\n\t\t*************************************************\n\n");
printf("Insira a medida em Jardas: "); scanf("%f", &jardas);
jardas_metros=jardas*0.9144;
printf("A medida em Metros e de: %.2f Metros", jardas_metros);
}
/****************
*Pes para Metros*
*****************/
void pesmetros()
{
float pes, pes_metros;
printf("\t\t*************************************************\n\t\t*\t\tPes para Metros\t\t\t*\n\t\t*\t\t(Pes x 0.3048=Metros)\t\t*\n\t\t*************************************************\n\n");
printf("Insira a medida em Pes: "); scanf("%f", &pes);
pes_metros=pes*0.3048;
printf("A medida em Metros e de: %.2f Metros", pes_metros);
}
/****************
*Metros para Pes*
*****************/
void metrospes()
{
float metros_pes, metros;
printf("\t\t*************************************************\n\t\t*\t\tMetros para Pes\t\t\t*\n\t\t*\t\t(Metros x 3.281=Pes)\t\t*\n\t\t*************************************************\n\n");
printf("Insira a medida em Metros: "); scanf("%f", &metros);
metros_pes=metros*3.281;
printf("A medida em Pes e de: %.2f Pes", metros_pes);
}
/************************************
*Polegadas (Inches) para Centimetros*
*************************************/
void polegadascentimetros()
{
float polegadas, polegadas_centimetros;
printf("\t\t*************************************************\n\t\t*\tPolegadas (Inches) para Centimetros\t*\n\t\t*\t(Polegadas x 2.54=Centimetros)\t\t*\n\t\t*************************************************\n\n");
printf("Insira a medida em Polegadas: "); scanf("%f", &polegadas);
polegadas_centimetros=polegadas*2.54;
printf("A medida em Centimetros e de: %.2f Centimetros", polegadas_centimetros);
}
/************************************
*Centimetros para Polegadas (Inches)*
*************************************/
void centimetrospolegadas()
{
float centimetros, centimetro_polegada;
printf("\t\t*************************************************\n\t\t*\tCentimetros para Polegadas (Inches)\t*\n\t\t*\t(Centimetros x 0.3937=Polegada)\t\t*\n\t\t*************************************************\n\n");
printf("Insira a medida em Centimetros: "); scanf("%f", &centimetros);
centimetro_polegada=centimetros*0.3937;
printf("A medida em Polegadas e de: %.2f Polegadas", centimetro_polegada);
}
/************************
*Milhas para Quilometros*
*************************/
void milhasquilometros()
{
float milhas, milhas_quilometros;
printf("\t\t*************************************************\n\t\t*\tMilhas para Quilometros\t\t\t*\n\t\t*\t(Milhas x 1.6093=Quilometros)\t\t*\n\t\t*************************************************\n\n");
printf("Insira a medida em Milhas: "); scanf("%f", &milhas);
milhas_quilometros=milhas*1.6093;
printf("A medida em Quilometros e de: %.2f Quilometros", milhas_quilometros);
}
/************************
*Quilometros para Milhas*
*************************/
void quilometrosmilhas()
{
float quilometros, quilometros_milhas;
printf("\t\t*************************************************\n\t\t*\tMilhas para Quilometros\t\t\t*\n\t\t*\t(Milhas x 1.6093=Quilometros)\t\t*\n\t\t*************************************************\n\n");
printf("Insira a medida em Quilometros: "); scanf("%f", &quilometros);
quilometros_milhas=quilometros*0.621;
printf("A medida em Milhas e de: %.2f", quilometros_milhas);
}

/******************
*Onças para Gramas*
*******************/

void oncasgramas()
{
float oncas, oncas_gramas;
printf("\t\t*************************************************\n\t\t*\t\tOncas para Gramas\t\t*\n\t\t*\t\t(Oncas x 28.3495=Gramas)\t*\n\t\t*************************************************\n\n");
printf("Insira o peso em Oncas: "); scanf("%f", &oncas);
oncas_gramas=oncas*28.3495;
printf("O peso em Gramas e de: %.2f", oncas_gramas);
}

/******************
*Gramas para Onças*
*******************/

void gramasoncas()
{
float gramas, gramas_oncas;
printf("\t\t*************************************************\n\t\t*\t\tGramas para Oncas\t\t*\n\t\t*\t\t(Gramas x 0.035273=Oncas)\t*\n\t\t*************************************************\n\n");
printf("Insira o peso em Gramas: "); scanf("%f", &gramas);
gramas_oncas=gramas*0.035273;
printf("O peso em Gramas e de: %.2f", gramas_oncas);
}

/************************
*Libras para Quilogramas*
*************************/
void librasquilos()
{
float libras, libras_quilos;
printf("\t\t*************************************************\n\t\t*\tLibras para Quilogramas\t\t\t*\n\t\t*\t(Libras x 0.4536=Quilogramas)\t\t*\n\t\t*************************************************\n\n");
printf("Insira o peso em Libras: "); scanf("%f", &libras);
libras_quilos=libras*0.4536;
printf("O peso em Quilogramas e de: %.2f", libras_quilos);
}
/************************
*Quilogramas para Libras*
************************/
void quiloslibras()
{
float quilos, quilos_libras;
printf("\t\t*************************************************\n\t\t*\tQuilogramas para Libras\t\t\t*\n\t\t*\t(Quilogramas*2.204585=Libras)\t\t*\n\t\t*************************************************\n\n");
printf("Insira o peso em Quilogramas: "); scanf("%f", &quilos);
quilos_libras=quilos*2.204585;
printf("O peso em Quilogramas e de: %.2f", quilos_libras);
}
/*******************************
*Toneladas (EUA) para Toneladas*
*******************************/
void tonstoneladas()
{
float tons, tons_toneladas;
printf("\t\t*************************************************\n\t\t*\tToneladas (EUA) para Toneladas\t\t*\n\t\t*\t(Toneladas(EUA)*1.1023=Toneladas)\t*\n\t\t*************************************************\n\n");
printf("Insira o peso em Toneladas (EUA): "); scanf("%f", &tons);
tons_toneladas=tons*1.1023;
printf("O peso em Toneladas e de: %.2f", tons_toneladas);
}
/*******************************
*Toneladas para Toneladas (EUA)*
*******************************/
void toneladastons()
{
float toneladas, toneladas_tons;
printf("\t\t*************************************************\n\t\t*\tToneladas para Toneladas(EUA)\t\t*\n\t\t*\t(Toneladas*0.907194=Toneladas(EUA))\t*\n\t\t*************************************************\n\n");
printf("Insira o peso em Toneladas: "); scanf("%f", &toneladas);
toneladas_tons=toneladas*0.907194;
printf("O peso em Toneladas e de: %.2f", toneladas_tons);
}
/*******************************
*Toneladas(Ing.) para Toneladas*
*******************************/
void tonsbtoneladas()
{
float tonsb, tonsb_toneladas;
printf("\t\t*************************************************\n\t\t*\tToneladas(Ing.) para Toneladas\t\t*\n\t\t*\t(Toneladas(Ing)*1.016=Toneladas)\t*\n\t\t*************************************************\n\n");
printf("Insira o peso em Toneladas(Ing.): "); scanf("%f", &tonsb);
tonsb_toneladas=tonsb*1.016;
printf("O peso em Toneladas e de: %.2f", tonsb_toneladas);
}
/*******************************
*Toneladas para Toneladas(Ing.)*
*******************************/
void toneladastonb()
{
float toneladas, toneladas_tonsb;
printf("\t\t*************************************************\n\t\t*\tToneladas para Toneladas(Ing.)\t\t*\n\t\t*\t(Toneladas*0.984251=Toneladas(Ing.))\t*\n\t\t*************************************************\n\n");
printf("Insira o peso em Toneladas: "); scanf("%f", &toneladas);
toneladas_tonsb=toneladas*0.984251;
printf("O peso em Toneladas(Ing.) e de: %.2f",toneladas_tonsb);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Muito bom ;)

Vou deixar a minha opinião para a próxima versão ou possível melhoramento:

1.º Respondendo primeiro a tua questão, era uma coisa muito boa e útil uma biblioteca para conversão de unidades. Bastava fazer o include da tua biblioteca e já tinha acesso a funções do género:

milha2km (valor em milhas) e retorna o valor em km.

E o include de novas funções na tua biblioteca é bastante acessível para qualquer utilizador.

Por outras palavras era bom uma separação da parte do código responsável pelo interface com o utilizador  (file main) e o código responsável pelas contas (biblioteca).

2.º Os coeficientes usados na conversão deveriam ser definidos como constantes, do género:

#define MILHA2KM 1.609344

Isto é só para facilitar a manipulação/leitura do código. Assim, mal abra o teu código, eu já tenho uma ideia do grau de precisão da conversão.

Como também o número de algarismos significativos que são apresentados e efectuado as contas, deveriam ser definidos também por um define.

3.º Sobre a optimização do código, eu vejo muita coisa repetida... podias reduzir muitas linhas de código se definisses funções abstractas... eu ao olhar para o teu código vejo muita coisa que pode ser optimizado. Um exemplo imediato é a função voltar que deveria ser só uma e não várias. Na minha opinião, um bom menu, sub-menu e seus derivados é feito com ciclos (por exemplo while) com uma flag de controlo. Deixo aqui um modelo: exemplo

4.º Olhando para um possível público alvo (alunos de FQ A) podes incluir mais conversões, principalmente as mais comuns (velocidade km/h <-> m/s) ou os que estudam engenharia (como eu) as unidades (feet, milhas náuticas, etc...) , sendo uma alternativa ao google e off-line :D

Isto é só umas opiniões minhas... vou experimentar e depois digo qualquer coisa...

Cumpr. bk@ero ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

O problema é que eu ainda sou um grande noob, e fiz o que fiz porque ainda nao aprendi mais de C! É preciso lembrar que so estou a seguir o livro do damas e estou no capitulo sobre vectores, nao estou em nenhum curso de informatica(embora pertenda entrar em LEIC na FEUP). O tipo de menus que deste eu nunca tinha ouvido falar:| Estou cheio de pica para começar outra vez com C estas ferias, mas na altura em que fiz isto nao sabia mais:S

Não me lembrei de usar os #defines, achei que nao valia a pena, pois consigo orientar-me no codigo. Estive varias semanas com o trabalho parado e mal recomeçava sabia logo o que tinha que fazer e onde estavam as coisas. Quanto as unidades, eu queria, mas é tramado! Sou aluno de FQ A, e foi tb com esse proposito que começei este programa. A principio so trazia conversao de unidades termicas... Imaginem, por exemplo, distancias: Metros para anos luz

1al --------9.47*10^15 m

25 al ------X

(25*9.47*10^15)/1

Como é que fazia o expoente no programa? Prometo incluir aquilo que acharem necessario, mas deem sugestoes, e se possivel incluam voces:P É open-source! biba a liberdade

Fiquem bem;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Expoente? Deve estar no math.h mas mesmo assim aqui vai...

int potencia(base,expoente)
{
if (expoente == 0)
return 1;
else
return base * potencia(base,expoente-1);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Como é que fazia o expoente no programa?

double pow(double,double)

long double powl(long double,long double)

float powf(float,float)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Expoente? Deve estar no math.h mas mesmo assim aqui vai...

int potencia(base,expoente)
{
if (expoente == 0)
return 1;
else
return base * potencia(base,expoente-1);
}

Como é que fazia o expoente no programa?

double pow(double,double)

long double powl(long double,long double)

float powf(float,float)

Não é isso que ele quer... ele quer saber como se coloca um número com expoente em C.

É simples, é como na calculadora com o e ou E, esta cont (25*9.47*10^15)/1 fica:

25 * 9,47e15


Boas

O problema é que eu ainda sou um grande noob, e fiz o que fiz porque ainda nao aprendi mais de C! É preciso lembrar que so estou a seguir o livro do damas e estou no capitulo sobre vectores, nao estou em nenhum curso de informatica(embora pertenda entrar em LEIC na FEUP). O tipo de menus que deste eu nunca tinha ouvido falar:| Estou cheio de pica para começar outra vez com C estas ferias, mas na altura em que fiz isto nao sabia mais:S

Mas é assim que se começa, as opiniões é para a próxima versão para um melhor código e com isso aprendes mais coisas :).

Não me lembrei de usar os #defines, achei que nao valia a pena, pois consigo orientar-me no codigo. Estive varias semanas com o trabalho parado e mal recomeçava sabia logo o que tinha que fazer e onde estavam as coisas.

Sim porque o texto está comentada, é fácil de ver onde as coisas estão... mas agora imagina uma coisa:

Tens num sítio conversão de milhas para km, que é 1 mile = 1.609344 kilometers.

Noutro ponto tens km para milhas que é 1 kilometers = (1/1.609344) mile.

E pretendeste incluir também velocidades ficavas num ponto: 1 mile/h = 1.609344 kilometers/h.

Como também o inverso: 1 kilometers/h = (1/1.609344) mile/h.

Por fim querias substituir 1.609344 por 1.6093 (ou o contrário), terias de correr o código todo para fazer a substituição ou um replace (que pode ser perigoso...).

O define vem evitar esta trabalheira.


Sobre a compilação do teu código, encontrei muitos warnings e alguns errors.

O compilador não reconheceu o sleep:

The GNU C Library

Function: unsigned int sleep (unsigned int seconds)

The sleep function is declared in `unistd.h'.

Por isso falta aí um include, mas sinceramente, eu sou da opinião que tanto o sleep, como o system('cls') deveriam sair do código!

Porque? porque o system('cls') não funciona na sheel do linux, e quem tem linux e experimente o teu código vê uma mensagem de erro na sheel  :).

O sleep no teu código é por causa do system('cls') quando há uma mensagem de erro, ora como podes ver na citação, um sleep 2500 segundos é muito tempo.

Outra coisa que detectei e não deverias usar nesta fase de aprendizagem que é a chamada recursiva de uma função (porque ainda não sabes fazer).

Digamos que o teu código funciona bem, mas conforme vamos correndo o teu programa, a memória usada por este vai aumentado sucessivamente, até que já não há mais espaço para a memória.

call Menu principal

          (opção errada)

          call menu principal

                  (opcao errada)

                    call menu principal

                          (...)

call Menu principal

          (opção medidas)

          call função medidas

                          (cálculos)

                          call menu voltar

                                  (quero continuar)

                                  call função medidas

                                          (cálculos)

                                          call menu voltar

                                                    (quero continuar)

                                                    call função medidas

                                                                (...)

Não sei se percebes o esquema, mas o que acontece é que nunca passas por duas vezes na mesma função, mas sim numa cópia dessa função que é derivado de si própria (pai ou avô).

Se fizesses o "trace" do programa vias isto que te estou a mostrar... Quando leres o capítulo dos ciclos, altera o teu código com isso. Só ficas à ganhar, aprendes coisas novas e o teu código fica muito mais profissional ;)

Continua a ler o damas, e a optimizar o código ;) e depois do damas há um mundo em C por explorar (damas é só para a fase inicial) ;)

Cumpr. bk@ero  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas,

Em primeiro lugar quero agradecer as respostas que recebi.

Citação de: Alcap em 15 de Dezembro de 2006, 21:27[/b']

Não me lembrei de usar os #defines, achei que nao valia a pena, pois consigo orientar-me no codigo. Estive varias semanas com o trabalho parado e mal recomeçava sabia logo o que tinha que fazer e onde estavam as coisas.

Sim porque o texto está comentada, é fácil de ver onde as coisas estão... mas agora imagina uma coisa:

Tens num sítio conversão de milhas para km, que é 1 mile = 1.609344 kilometers.

Noutro ponto tens km para milhas que é 1 kilometers = (1/1.609344) mile.

E pretendeste incluir também velocidades ficavas num ponto: 1 mile/h = 1.609344 kilometers/h.

Como também o inverso: 1 kilometers/h = (1/1.609344) mile/h.

Por fim querias substituir 1.609344 por 1.6093 (ou o contrário), terias de correr o código todo para fazer a substituição ou um replace (que pode ser perigoso...).

O define vem evitar esta trabalheira.

Como nao é costume alterarem as unidades nao usei lol! Achei que nao valia a pena.

Outra coisa é os expoentes. Quando temos uma conta em que o expoente do resultado é o mesmo tudo bem, é facil, mas quando temos expoentes diferentes nos membros e no resultado? Como é que se faz? É como sugeriu o Saco?

Quanto aos system ("cls") as minhas desculpas. Eu sou um grande apologista de linux, ja tive kubuntu, fedora, e agora vou meter gentoo. O problema é que quando estive com fedora nao conseguia meter a net a funcionar, e tambem nao tinha tempo para gastar, e por isso recorri ao windows para programar isso... Quanto ao sleep, nao fazia a minima ideia que dava erros...

Quanto ao call menu, ainda nao cheguei a essa parte, e tambem nao percebi muito bem o teu esquema, se puderes explicar melhor, ou indicar o capitulo onde isso esta, agradecia

Fiquem bem;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora