1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

programacao C

Discussão em 'Programação' iniciada por insyspower, 4 de Abril de 2013. (Respostas: 3; Visualizações: 741)

  1. insyspower

    insyspower Power Member

    Boas Pessoal !

    tenho algumas duvidas, já fiz o Exercicio 2 mas estou com duvidas no exercicio 2.1 e 3, se alguem puder dar uma ajuda, e muito bem vinda :P

    Exercício 2


    (leitura de valores, funções, ciclos e condições)
    Escreva um programa que leia dois valores numéricos (inteiros) a partir do teclado e
    que execute a função minha_divisao (que deverá implementar). Essa função deverá
    imprimir o resultado da divisão inteira do primeiro valor pelo segundo assim como o
    respectivo resto (pode usar o operador %). O programa deverá repetir o procedimento
    (ler valores e executar função) até que o valor introduzido para o dividendo seja 0.


    Para ler dados introduzidos pelo utilizador pode usar a já bem conhecida função



    int scanf (const char *template, ...)


    Exemplo:


    int a;
    scanf(“%d”, &a);


    Crie o respectivo executável e teste o seu programa.


    Exercício 2.1 – Altere o seu programa de forma que os valores do quociente e do resto
    sejam “retornados” para o programa principal. A impressão desses valores deverá ser
    feita no programa principal: void minha_divisao(int, int, int *, int *).


    Exercício 3


    (cadeias de caracteres , parâmetros da função main())


    Modifique o programa anterior de forma a que quando forem indicados dois valores na
    linha de comando (por exemplo, “./divisao 10 2”) o programa execute a função definida
    anteriormente, usando os valores indicados na linha de comando, e termine a sua
    execução. Para esse fim, a função main() deverá ter os argumentos definidos tal como
    indicado abaixo:


    int main(int argc, char* argv[])


    Para converter uma string para um inteiro pode usar a seguinte função (execute o
    comando “man strtol”


    para obter informações sobre o funcionamento da função):


    long int strtol (const char *string, char **tailptr, int base)


    Crie o respetivo executável e teste o seu programa.

    Fiz o Exercicio 2 desta maneira:

    Código:
     #include<stdio.h>
    
     int main()
    {
    	int n1,n2,resto;
    	float divisao;
    	do
    	{
    		printf("digite o primeiro valor \n"); // dividendo
    		scanf("%d",&n1);
    		printf("digite o segundo valor \n");  //divisor
    		scanf("%d",&n2);
    	
    		void minha_divisao(int n1, int n2)
    		{
    			if (n2!=0)
    			{
    				divisao=n1/n2; // quociente
    				printf(" o resultado da divisao e = %.2f \n",divisao);
    				resto=n1%n2;   //resto
    				printf(" o resto e = %d \n",resto);
    			}
    			else printf(" erro denominador nao pode ser zero ! \n");
    		}
    		
    		minha_divisao(n1,n2);
    	}while (n2==0);
    	
    	system("pause");
    	return(0);	
    }
    
    
    
    o exercicio 2, parece estar bem, agora tenho duvidas no exercicio 2.1 e 3

    cumprimentos
     
  2. Ace-_Ventura

    Ace-_Ventura Power Member

    percebes de ponteiros?
     
  3. insyspower

    insyspower Power Member

    Percebo alguma coisa de ponteiros,

    tentei resolver a minha maneira, o exercicio 2.1 e 3
    mas penso que não conseguir fazer exactamente o que se pedia,
    por isso se alguem puder dar uma ajudinha ...

    cumprimentos

    Código:
    #include<stdio.h>
    
     int main(int argc, char* argv[])
    {
        int n1,n2,n11,n22,resto,resto2,restodividir;
        float divisao,divisao2,dividir;
        do
        {
            printf("digite o primeiro valor \n"); // dividendo
            scanf("%d",&n1);
            printf("digite o segundo valor \n");  //divisor
            scanf("%d",&n2);
        
            if(argc !=3)
                {
                    printf("Erro ! - Usar : nomeprograma n1 n2 \n");
                    //return(-1);
                }
                else
                {
                    dividir= atoi(argv[1])/atoi(argv[2]); // ou divisao= atoi(*(argv[1])+atoi(*(argv[2])); indiferente porque atoi(numeros)
                    restodividir= atoi(argv[1])%atoi(argv[2]);
                    printf("resultado em dividir= %.2f, restodividir= %d \n ",dividir,restodividir);
                }
                
            void minha_divisao(int n1, int n2,int *n11, int *n22)
            {
                if (n2!=0)
                {        
                    divisao=n1/n2; // quociente
                    printf(" o resultado da divisao e = %.2f \n",divisao);
                    resto=n1%n2;   //resto
                    printf(" o resto e = %d \n",resto);
                    divisao2=*n11/(*n22); // quociente2 
                    printf(" o resultado da divisao2 e = %.2f \n",divisao);
                    resto2=*n11%(*n22);   //resto2
                    printf(" o resto2 e = %d \n",resto);
                }
                else printf(" erro denominador nao pode ser zero ! \n");
            }
            minha_divisao(n1,n2,&n11,&n22);
        }while (n2==0);
        
        system("pause");
        return(0);    
    }
    
    
    a parte que estou a ter mais dificuldade é no primeiro "else" que tem "argc" e "argv", e que não consigo ainda que mostre os valores correctos os valores que aparecem nesses dois printf são sempre :
    "0.00" e "0"
     
    Última edição: 4 de Abril de 2013
  4. Kemosabe-TBC

    Kemosabe-TBC Power Member

    O resultado de dividir 2 inteiros é um inteiro, não um float/double. Tens de fazer cast de uma das partes da fracção para float em:

    dividir= atoi(argv[1])/atoi(argv[2]);
     

Partilhar esta Página