2010-10-02 6 views
-1

J'ai un ensemble de valeurs flottantes précédemment définies (un ensemble d'angles) J'ai besoin d'une fonction qui prend deux angles en entrée et retourne tous les angles entre eux. L'utilisateur entre d'abord dans un ensemble d'angles flottant et l'utilisateur peut saisir des deux angles (mon programme doit retourner tous les angles entre ces valeurs) Par exemple 30310 (retourner tous les angles> = 30 et mais 310,30 devraient également être valides (angles devraient enrouler autour)C++ calculer tous les angles entre deux angles

Merci à l'avance

+0

est-ce une question de devoirs? – Ruel

+10

Tous les angles? N'y a-t-il pas un nombre infini? – duffymo

+0

@Duffymo bien si c'est entre 30 et 310, ce n'est pas infini. – Ruel

Répondre

2

Je devine quelque chose comme:

for(int f = start; f != end; f = (f + 1) % 360) { 
    // do something with f 
} 
+0

ohh..est-ce que cela veut dire par «enrouler»? ouais ... c'est une bonne approche alors, tant qu'il cherche des entiers. – mpen

2

Voulez-vous dire que votre programme devrait renvoyer tous les angles présents dans les ensembles d'angles précédemment entrés?

Dans ce cas, il suffit de comparer les valeurs enregistrées et les deux angles d'entrée. Quelque chose comme-

for (i = 0; i < array_length; i ++)

{

if(array[i] >= value1 && array[i] <= value2) 

    { 
    cout << array[i]; 
    } 

}

Une meilleure façon peut-être pour trier les angles précédemment enregistrés. Dans ce cas, vous n'aurez pas besoin de parcourir toutes les valeurs stockées.

Si vous avez besoin pour obtenir tous les angles entre deux angles, alors c'est infini (si vous ne pensez pas que des valeurs entières)

+0

Je pense qu'il ya confusion.J'ai l'entrée d'angles, ce n'est pas des angles entre 2 nombres flottants, plutôt des angles entre mon ensemble de valeurs flottantes qui est fini – abbas

+0

Oui entre un ensemble d'angles précédemment entré. – abbas

+0

@ TrickyM66: [Vous avez besoin de 50 rep pour laisser des commentaires sur des messages autres que les vôtres.] (Http://stackoverflow.com/faq) –

3

Je reçois ce que vous demandez. Pour chaque angle A dans une liste d'angles, vous voulez savoir si A est inclus dans le secteur défini par les angles B et C. Si B> C, alors le secteur commence à l'angle B et se termine autour de la marque 0 degré pour terminer à A.

est ici un code qui fait ce que vous demandez:

#include <vector> 
#include <iostream> 
#include <cmath> 

bool angleIsBetween(float angle, float start, float end) 
{ 
    // If angle is outside the range [0,360), convert it to the 
    // equivalent angle inside that range. 
    angle = fmod(angle, 360.0f); 

    // If start>end, then the angle range wraps around 0. 
    return (start<=end) ? (angle>=start && angle<=end) 
         : (angle>=start || angle<=end); 
} 

int main() 
{ 
    float angles[] = {0.0, 180.0, 30}; 
    size_t nAngles = sizeof(angles)/sizeof(angles[0]); 

    for (size_t i=0; i<nAngles; ++i) 
    { 
     std::cout << angleIsBetween(angles[i], 30.0, 310.0) << " "; 
     std::cout << angleIsBetween(angles[i], 310.0, 30) << " "; 
    } 
    std::cout << "\n"; 

    return 0; 
} 

cette sortie: 0 1 1 0 1 1

+1

+1 pour arriver à une interprétation vaguement crédible d'une spécification décousue .. Je ne suis pas convaincu cependant: abbas a semblé penser qu'il avait besoin des maths de lycée pour résoudre ceci, et je ne vois juste pas comment ceci est plus mathématique que toute autre tâche de programmation mondaine (qu'il dit qu'il va bien). Tout est très déroutant! Nous sommes amenés à penser qu'il pourrait y avoir un besoin de sinus, de cosinus etc. Bon contact pour gérer les angles négatifs &> = 360 via fmod(). – user433534

+0

Je crois que c'est effectivement ce que demande le PO. La question, bien que mal rédigée, n'est en réalité pas si difficile à comprendre, et une fois que vous vous rendez compte, il n'y a pas (ou très peu) de maths impliqués. Aucun angle mathématique n'est nécessaire, comparez simplement les deux valeurs comme vous l'avez fait, Emile. Je ne vois pas en quoi consistait la confusion de l'OP. – Clonkex

+0

Une chose que je dirais, cependant. Je pense que le PO préférerait obtenir une liste des angles, plutôt qu'une liste de si oui ou non l'angle est dans le secteur. – Clonkex

1

est ici une fonction qui imprime tous les angles entre une plage donnée . Espérons que cela aide:

void angles(double a1, double a2) { 
    int deg1, min1, sec1, deg2, min2, sec2; 
    double const mult = 0.0166666667; 
    double angle; 
    if (a1 == (int)a1) { 
     deg1 = a1; min1 = 0; sec1 = 0; 
    } else { 
     deg1 = a1; 
     min1 = (int)(60 * (a1 - (int)a1)); 
     sec1 = (int)(60 * ((60 * (a1 - (int)a1)) - min1) + 0.5); 
    } 
    if (a2 == (int)a2) { 
     deg2 = a2 - 1; min2 = 59; sec2 = 60; 
    } else { 
     deg2 = a2; 
     min2 = (int)(60 * (a2 - (int)a2)); 
     sec2 = (int)(60 * ((60 * (a2 - (int)a2)) - min2) + 0.5); 
     if (sec2 == 0) { 
      sec2 = 60; 
      min2--; 
     } 
    } 
    if (deg1 <= deg2) { 
     cout << deg1 << " " << min1 << " " << sec1 << " < " << deg2 << " " << min2 << " " << sec2 << endl; 
     while (deg1 <= deg2) { 
      if (deg1 < deg2) { 
       while (min1 < 60) { 
        while (sec1 < 60) { 
         angle = deg1 + (min1 * mult) + (sec1 * mult * mult); 
         cout << deg1 << " " << min1 << " " << sec1 << " = " << angle << endl; 
         sec1++; 
        } 
        sec1 = 0; 
        min1++; 
       } 
      } else { 
       if (min1 < min2) { 
        while (min1 <= min2) { 
         if (sec1 < sec2) { 
          while (sec1 < 60) { 
           angle = deg1 + (min1 * mult) + (sec1 * mult * mult); 
           cout << deg1 << " " << min1 << " " << sec1 << " = " << angle << endl; 
           sec1++; 
          } 
          sec1 = 0; 
          min1++; 
         } else { 
          while (sec1 <= sec2) { 
           angle = deg1 + (min1 * mult) + (sec1 * mult * mult); 
           cout << deg1 << " " << min1 << " " << sec1 << " = " << angle << endl; 
           sec1++; 
          } 
          sec1 = 0; 
          min1++; 
         } 
        } 
       } else { 
        while (min1 < 60) { 
         while (sec1 < 60) { 
          angle = deg1 + (min1 * mult) + (sec1 * mult * mult); 
          cout << deg1 << " " << min1 << " " << sec1 << " = " << angle << endl; 
          sec1++; 
         } 
         sec1 = 0; 
         min1++; 
        } 
       } 
      } 
      min1 = 0; 
      deg1++; 
     } 
    } 
} 

int main() { 
    angles(40.3472, 40.5); 
    return 0; 
} 
+0

Qu'est-ce que ... le ... diable .. Whaaaaaaaaa ..... Qu'est-ce que c'est? Vous vous rendez compte que l'OP voulait que les utilisateurs puissent entrer un nombre arbitraire d'angles, puis entrer une plage et faire en sorte que le programme produise l'un des angles qu'ils ont entré en premier dans la plage, n'est-ce pas? Est-ce que ... cela produit-il CHAQUE angle dans une fourchette, en bas de la seconde? Woah ... – Clonkex

Questions connexes