Ir ao conteúdo
  • Cadastre-se

C Funçã com retorno de valor


Posts recomendados

image.thumb.png.fc02cbc1c78ffc66e084f75cd5e67885.png

 

Estou tentando resolver tal questão, mas estou com dúvida nas restrições. O meu código é este:

 

#include <stdio.h>
#include <stdlib.h>

int main() {
	int num1;
	int num2;
	
	num1 = rand()%100;
	num2 = rand()%100;
	
	int divide (int num1, int num2);
	
	divide (num1, num2);	
	
	return 0;
}

int divide (int num1, int num2) {
	
	if (num1 % num2 == 0) {
		printf("divisivel");
	}
	
	if (num1 < num2) {
		printf("nao divisivel");
	}
}

 

Link para o comentário
Compartilhar em outros sites

@programadornovatoc ,acredito que é isso!

 

E ao invés de atributos aleatórios atributos de entrada, ou seja, use o padrão de entrada

Sem interação? Acredito que seja sem mensagens ou instruções.

 

O enunciado também diz, nas entrelinhas, que a resposta retorna para programa principal (função main).

 

 

#include <stdio.h>
#include <stdlib.h>

  
int divisivel (int num1, int num2);

int main(void)
{
	int num1= 0, num2= 0;


	scanf(" %d",&num1);
	scanf(" %d",&num2);

	printf("%s",divisivel(num1,num2)? "divisivel \n":"nao divisivel \n");
	return 0;
}

int divisivel(int num1,int num2) { return !(num1%num2); }

 

Link para o comentário
Compartilhar em outros sites

Em 17/08/2019 às 10:39, programadornovatoc disse:

mas estou com dúvida nas restrições

 

  • a restrição (a) indica que não deve ler os valores ou mostrar qualquer resultado na função, que deve apenas calcular o resultado e devolver
  • a restrição (b) não é bem uma restrição: é apenas o objetivo
Citação

Um inteiro A é dito divisível por B se o resto da divisão de A por B é zero

 

Em relação ao seu código:

 

divide.png.b75d14b3635feb10cddc2f1d9bd36585.png

A relação de divisão é digital: ou A divide B ou A não divide B, para quaisquer A e B. Então poderia já imprimir "nao divisivel" numa clausula else do primeiro if. E se num2 for maior que num1 não vai imprimir nada? Está errado. Para num1 = 100 e num2 = 99 por exemplo, não vai mostrar nada

 

Talvez devesse usar simplesmente os nomes do enunciado, A e B ao invés de inventar novos nomes.

Entenda: se A < B então o resto da divisão de A por B é A, certo? afinal

Se A < B então        

A = 0 x B + A
        
Exemplo: A= 50, B = 100

50%100 = 50 porque 50 = 0x100 + 50

Se A<B então A%B = A       
        

E pelo enunciado não deve haver interação na função, certo? as instruções printf() devem estar em main() e apenas usar o resultado do cálculo feito na função divide().

main.png.a2a6c967323c644a95807d9f78058287.png

Note que o enunciado diz que

 

Citação

a leitura dos valores de entrada deve ser feita no programa principal

 

E assim usar rand()%100 não significa assim uma leitura. É mais um sorteio :D 

 

Como exemplo pode usar algo assim:

 

#include "stdio.h"

int divide(int A, int B)
{
    return ((A % B) == 0);
}    // end divide()

int main(int argc, char** argv)
{
    int A;
    int B;

    printf("A: ");
    scanf("%d", &A);
    printf("B: ");
    scanf("%d", &B);

    if ( divide(A, B) ) 
        printf("divisivel\n");
    else
        printf("nao divisivel\n");
    return 0;
}    // end main()

Que mostra:

A: 100
B: 50
divisivel

Ou

A: 50
B: 100
nao divisivel

por exemplo.

 

Note que em C o valor zero é considerado falso e qualquer outro é considerado verdadeiro.  E uma expressão lógica, como uma comparação, retorna zero se falsa ou 1 se verdadeira.

Exemplo:

    printf("%d\n", (int)(100==100));	// imprime 1
    printf("%d\n", (int)(100==99));	// imprime 0

E assim você pode escrever divide() como:

int divide(int A, int B)
{
	return ((A % B) == 0);
}	// end divide()

Bem de acordo com o conceito. Verdadeiro retorna verdadeiro...

Mas você também pode escrever 

Em 17/08/2019 às 12:38, MB_ disse:

int divisivel(int num1,int num2) { return !(num1%num2); }

 

Como sugerido por @MB_

 

Apenas vai estar negando duas vezes a condição em si. (num1%num2) retorna false para quando num1 divide num2. Isso porque zero é falso, como vimos. E então o operador ! inverte a condição para true e fica tudo certo. Alguém da matemática diria

Citação

o inverso da função inversa é a identidade.

 

Em C isso seria por exemplo

Citação

((!(!(A % B))) == (A % B))    // para qualquer condicao


:D ok isso foi só uma piada :D 

 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!