Je suis relativement nouveau en C++, venant du monde de Python. J'ai décidé d'écrire un ensemble de fonctions pour trouver la moyenne, la médiane, le mode et la gamme d'un ensemble de nombres. Pour aider au calcul de la médiane, j'ai décidé de faire 12g (le plus petit au plus grand) et g2l (le plus grand au moins). Je comprends que je n'utiliserai que l'un d'entre eux, mais je veux faire les deux juste pour l'exhaustivité.Comment obtenir un float à partir d'un char * en C++?
Je veux que mon programme utilise le moins de librairies externes (même standard). La raison en est que j'utiliserai probablement toutes les fonctions que j'écris à nouveau. Ils seront utilisés dans mon système d'exploitation que je développe basé sur les tutoriels de BrokenThorn. Par conséquent, je veux garder le code le plus indépendant possible, en utilisant des fonctions que j'écris à la place des fonctions dans les bibliothèques standard.
J'ai deux problèmes:
- La première est que je veux que mes fonctions pour pouvoir gérer les valeurs flottantes. Avec la fonction d'entrée utilisateur que j'ai créée précédemment, j'obtiens un pointeur sur un tableau char. J'ai besoin de savoir comment convertir cela en une valeur flottante. Je pensais que je pourrais peut-être créer une union avec deux membres, de types char et float, et juste référence le membre flottant quand j'ai besoin d'utiliser la valeur. Je voudrais juste mettre des données d'utilisateur dans le membre char. Cependant, je ne sais pas si cette approche fonctionnerait. Le tutoriel que j'utilise ne va pas très loin dans la définition de mes propres types de données.
- Mon second dilemme est que je ne sais pas comment créer les fonctions l2g et g2l. Je prévoyais d'emboîter deux pour les boucles. J'allais utiliser l'intérieur pour trouver le prochain numéro dans le nouveau tableau, et l'extérieur pour répéter ce processus jusqu'à ce qu'il passe à travers tous les nombres dans le tableau original. Ensuite, la fonction retournera un pointeur vers le nouveau tableau de flottants, après avoir supprimé la mémoire dynamique du premier tableau.
Un autre problème est que je pense que j'ai besoin de retourner la longueur d'un tableau lorsque je renvoie un pointeur. La raison en est que pour utiliser une boucle for pour parcourir le contenu de ce tableau, j'ai besoin d'avoir la position la plus haute utilisable dans le tableau, donc je ne reçois pas d'ordures. J'ai un moyen d'éviter ce problème en faisant une structure qui a deux membres, la longueur et le tableau. Il ressemble à ceci:
struct arrayLength {
int l;
float * p;
} ;
J'espérais que l'ensemble des appels suivants:
float * myArrayPointer; // I will change this to user input once I get the rest of the program working
myArrayPointer = new float[5];
myArrayPointer[0] = 65.97;
myArrayPointer[1] = 21.06;
myArrayPointer[2] = 21.06;
myArrayPointer[3] = 509.69;
myArrayPointer[4] = -41.73; // Can floats be negative?
cout << mean(myArrayPointer, 5); // Give function mean the pointer to array and number of elements
cout << "\n";
cout << median(myArrayPointer, 5);
cout << "\n";
cout << range(myArrayPointer, 5);
cout << "\n";
cout << mode(myArrayPointer, 5);
cout << "\n\n\n";
arrayLength myArrayPointerLG = l2g(myArrayPointer, 5);
float * myArrayLGitem;
for(int i=0;i<myArrayPointerLG.l;i++) {
myArrayLGitem = myArrayPointerLG.p[i];
cout << myArrayPointerLGitem << "\n";
}
donnerions la sortie suivante:
115.21
21.06
551.42
21.06
-41.73
21.06
21.06
65.97
509.69
Jusqu'à présent, je n'ai pas obtenu mon code compilé. :/Je pense que peut-être une boucle for a sa propre portée ... Quelqu'un pourrait-il vérifier cela aussi? Voici un lien vers le code sur pastebin:
Et au cas où vous vous poseriez à propos de l'inclusion <iostream>
... Je vais retirer cela et utiliser les fonctions d'impression que j'ai écrit si je finis l'ajouter à mon système d'exploitation. OU je pourrais juste définir std :: cout. Les erreurs que j'obtiens disent que currentPosition et listOfNumbers sont non déclarés (non définis) dans l2g. Je cours Windows 7 64 bits, en utilisant le compilateur MSVC++ 2008 Express Edition. Merci d'avance à tous ceux qui aident!
Votre code ne compile pas car il comporte d'importantes erreurs typographiques. - BTW, vous voulez éviter les fonctions de la bibliothèque, et vous utilisez 'new (nothrow)'? – UncleBens
S'il vous plaît apprendre à utiliser les paragraphes. Votre message est presque illisible. En outre, utilisez des bibliothèques standard; ils sont entièrement portables. En outre, les flotteurs peuvent être négatifs. Les seuls types numériques qui ne peuvent pas être sont les types entiers non signés. –
Pouvez-vous résumer certaines questions spécifiques (plus courtes)? Il est difficile d'analyser vos questions à partir de ce long article – Jay