programacao C

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
 
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:
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]);
 
Back
Topo