2017-03-01 2 views
-1

donc j'ai lutté avec cela pour un tarif vieux maintenant et besoin d'aide avec les fonctions bool. Je suis coincé sur la partie recherche des helpers dans pset3. Je sais que ma fonction de tri de sélection fonctionne, car j'ai utilisé printf pour vérifier que les numéros sont triés, et j'ai testé find avec une simple recherche linéaire pour confirmer que cela fonctionnait correctement.CS50 pset3 find renvoie toujours vrai

Mon code de la fonction de recherche est la suivante:

bool search(int value, int values[], int n) 

{ 

// Set upper and lower limits for mid point calculation 
int max = n - 1; 
int min = 0; 


while (min <= max) 
{ 
    // Set the mid point of values as half the difference of the upper and lower limit. 
    int mid = (max - min)/ 2; 

    // If the array position we look at for this itteration of mid is equal to the value, return true 
    if (value == values[mid]) 
    return true; 

    // If the mid value is less than our value, look at the right half (+1 as we dont need to look at the mid point again) 
    else if (value > values[mid]) 
    return min = mid + 1; 

    // Same principle but for the left half of the array 
    else if (value < values [mid]) 
    return max = mid - 1; 

} 
return false; 

}

Pour autant que je peux dire ma logique est saine pour les calculs réels. J'ai essayé un certain nombre de différentes façons de retourner false, comme "if (value < values ​​[mid + 1] & & value> values ​​[mid -1]" pour retourner false mais en vain alors je les ai omis du code ici. Toute aide serait grandement appréciée.

Vive

Tom

Répondre

0

Je n'ai pas vérifié les logiques de votre code, mais vous ne pouvez pas définir une fonction pour retourner un bool mais également l'utiliser pour renvoyer des nombres comme dans return min = mid + 1; Ou dans return max = mid - 1;

Réglez simplement la fonction pour renvoyer int à la place et utilisez 1 et 0 comme vrai et faux.

En outre, C n'a pas les types booléens à moins que vous les définir dans votre code ou l'importation stdbool.h

Edit: juste de se rappeler que vous ne pouvez pas changer la signature de la fonction, alors essayez créer une fonction de votre choix et l'appeler ensuite dans la fonction de recherche déjà définie.

+0

Vous étiez sur J'ai essayé de retourner mes nouveaux min et max, qui a été retourné vrai pour n'importe quelle valeur. J'aurais dû repérer que dans tous les cas, il retournait vrai, l'erreur était avec mon utilisation du retour. Merci pour l'aide. – TomForrest