0
votes

Imprimer le plus haut des deux valeurs sans utiliser si des déclarations

Je fais une mission de devoirs en C et je rencontre un peu de problèmes. Après avoir calculé deux valeurs, je dois être capable d'imprimer le plus haut des deux valeurs sans à l'aide de ses opérateurs logiques, des opérateurs relationnels ou des constructions de sélection. J'ai déjà utilisé des calculs qui déterminent la plus grande des deux valeurs, mais je ne sais pas si cela est très utile à l'avenir.

Je voudrais également clarifier que je n'imprime pas la valeur maximale, je suis plutôt censé imprimer l'option maximale. Par exemple, l'option 1 = 2000 et l'option 2 = 3000, je souhaite pouvoir imprimer "l'option 2 est la plus grande".

Je devrais aussi dire que suivre avec le reste de l'affectation, cette sélection n'est généralement faite que avec des opérations mathématiques + * -% / et pow ()

c

8 commentaires

Et je suppose que l'expression conditionnelle ternaire ?: n'est pas autorisé non plus?


Quelle est votre question? Y a-t-il un problème avec votre solution?


Quelle est exactement votre question? Vous prétendez que vous avez trouvé un moyen, alors que demandez-vous réellement? De plus, veuillez télécharger du code afin que nous puissions aider davantage


@Frontear c'est "avoir à pouvoir être capable". A été confus aussi ...


Cela ressemble à Xy-problème, vous savez. La partie de " calculer deux valeurs " doit impliquer le bon ordre.


J'ai trouvé un moyen d'imprimer la valeur maximale et non de l'option maximale que le deuxième paragraphe suggère. Quant à?: Je suppose que non.


Postez le code que vous avez essayé. Un exemple de reproductible minimal .


@Gox Comment inverser les chiffres dans un numéro comme codage max (A, B) ?


6 Réponses :


0
votes

Le plus grand des deux int types x et y est xxx

x x est z si x ^ z est 0 et de la même manière pour y . .


7 commentaires

Maintenant, comment utilisez-vous cela pour produire le résultat souhaité?


@LightnessRacesinorbit: Honnêtement, la jeunesse d'aujourd'hui doit être cuillère ;-)


(x


@HEDEDHOG: C'est mieux?


Oui, nous ne sommes pas en mesure d'utiliser des opérateurs de comparaison (= <> etc.) ainsi que de & |


@BobtheBuilder: Vous pouvez refondrer et en termes de ^ et d'autres, mais vous savez quoi, je suis trop vieux pour cela. Êtes-vous sûr de ne pas utiliser & ? Je comprendrais la justification de ne pas utiliser && .


Eh bien, ce n'est pas la cuionnage autant que littéralement répondre à la question qui a été posée



1
votes

Je voudrais utiliser la fonction Fmax . Il faut des doubles en tant qu'arguments. Vous devrez peut-être lancer vos chiffres en doubles.


0 commentaires

0
votes

L'idée est d'utiliser un bit de signer comme index pour la matrice.

signed char index1 = (option1value - option2value) >> 7;
signed char index2 = (option2value - option1value) >> 7;


4 commentaires

Option1Value - Option2Value est soumis à int débordement. Signé int Overflow est comportement non défini (UB).


@chux, tu veux dire "non signé INT"? Ou dans le cas où deux valeurs sont les deux min_int? Ensuite, l'auteur doit prendre longtemps.


Non . Cette solution ne fonctionnera pas pour tous les int , mais op n'a pas de type spécifié ni plage.


Je viens de fournir l'idée, l'auteur doit choisir de bons types de données et etc.



1
votes

le plus élevé de deux valeurs
Seulement fait avec des opérations mathématiques (+ * -% / et POW) P>

Lorsque les valeurs sont à la fois> 0, recherchez les 2 quotients A / B, B / A. L'un des quotients sera 0 (en supposant que les types sont des nombres entiers) et l'autre 1 ou plus. (Ou les deux quotients sont 1 lorsque les valeurs sont les mêmes). P>

Effectuer P>

int a[2] = { value1, value2 };
int index = pow(a[1]/a[0], a[0]/a[1]);
printf("%d\n", a[index]);
// or "to print the maximum option"
printf("%d\n", index);

0 commentaires

-1
votes

sans tableaux car je comprends qu'ils ne sont pas autorisés. Seulement maths xxx


1 commentaires

printlarger (42,1) tentatives c [1 - 42]) .



0
votes

C'est plus comme un problème mathématique: xxx


Avertissement 1: Ça ne marche pas lorsque O1 == O2

AVERTISSEMENT 2: Traitement de cette réponse ce problème comme problème mathématique. Le système en C ne garantit pas la valeur d'un double numéro exact, mais elle tient une approximation. Ainsi, comme l'a souligné Chux, il peut ne pas donner la bonne réponse pour les grands nombres.

vous pouvez avoir double a = x / | x | donner a une valeur de 0,9999 in c, rendant int b = (int) a ayant une valeur de 0


11 commentaires

module peut être légèrement différent de | res | avec le gros res comme le carré pow (res, 2) n'est pas Le carré mathématique exact avec grand res . Dans ce cas et avec faible POW , le module (int) peut être désactivé par un, craquez-vous espéré pour la division. O2 - O1 est sujet à débordement.


Oui, ce qui ne devrait certainement pas être utilisé dans un programme, mais j'imagine que c'est une question sur une liste et que je suis professeur d'informatique, je pense que c'est la réponse attendue.


Vinicius de Novaes, qu'est-ce que vous obtenez lorsque o1 == o2 ? Je reçois la division de 0 - une faute d'exception.


Chux, je l'obtiendrais aussi, mais comme la question n'a pas défini de règle pour l'affaire que O1 == O2, je n'avais pas pris la peine avec cela.


J'essaie de penser d'une manière de résoudre ce btw


En tant que mathématicien, offrir un codage qui utilise un modèle mathématique est compréhensible. En tant que professionnel de l'informatique, en supposant que cela soit moins vrai. Ce sont exactement les véritables limitations de codage qui méritent notre attention sur les détails. Parfois, ces petits problèmes tels que Overflow inattendu coûte cher. Bienvenue à cela.


Votre prudence sur l'utilisation d'un double a des lacunes. Il n'y a rien d'inexact sur un double . Il s'agit simplement d'un sous-ensemble des nombres réels distribués linéairement dans un espace exponentiel, cf. int qui est un sous-ensemble des nombres réels distribués linéairement.


@Bathsheba the double ATTENTION ne concerne pas le codage double comme vous avez bien décrit. C'est le Double Math of POW (POW (RES, 2), 0.5) Pour atteindre FABS (RES) C'est le problème. Le code ici peut entraîner un résultat qui diffère de fabs (res) menant à un résultat incorrect.


@chux: Oui, c'est un bon point. Utilisation de RES / ROUNT (module) serait, je pense, corrigez-le.


@Bathsheba rond () aidera sauf lorsque l'ULP est de 0,5 (près du niveau d'erreur), il s'agit d'une pièce de monnaie.


@chux je vais devoir réfléchir à celui-là ;-)