12 réponses
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
18 sept. 2013 à 14:20
18 sept. 2013 à 14:20
Bonjour,
Voici un code commenté qui devrait pouvoir répondre à tes attentes:
Voici un code commenté qui devrait pouvoir répondre à tes attentes:
int *ft_range(int min, int max)
{
int *arr; // Futur tableau d'int
int i;
if (min > max) // si min > max ; retourne 0
return (0);
arr = malloc(((max - min) + 2) * sizeof(int));
/*
** malloc <=> j'alloue (((max - min) + 2)) cases qui ont la taille d'un int
** Pour un tableau qui va de 1 à 3;
** ça fait (3 - 1) + 2 = 4 cases
** (de 0 à 3 + une dernière pour stocker null
*/
for (i = 0; i < ((max - min) + 1); i++) // remplissage du tableau avec les bonnes valeurs
arr[i] = min + i;
arr[i] = 0; // Dernière case du tableau a null pour detecter sa fin
return (arr);
}
int main(int ac, char **av)
{
int *arr;
arr = ft_range(5, 10); // assignation du tableau avec les valeurs min et max ; 5 & 10
if (arr)
while (*arr) // Affichage du tableau case par case
printf("%d\n", *(arr++));
return (0);
}
C est pareil que pour le premier non ? Sauf que lorsque min > max ce sera un pointeur de range qui sera sur NULL, et ensuite pour retourner la taille de la range on mettre ca ? arr = malloc (range) * sizeof(int))
Et pour le premier if quand min>max return 0, vu que c est un pointeur nul qui sera retourne pourquoi ne met on pas de pointeur ?
Et pour le premier if quand min>max return 0, vu que c est un pointeur nul qui sera retourne pourquoi ne met on pas de pointeur ?
Bonjour je te remercie ! c est tres bien explique c est beaucoup plus claire comme ca . Juste un truc pour le min > max retourne 0, ca ne retourne pqs 0 mais nulle, donc je remplace 0 par NULL ? et c est cense renvoyer un pointeur nulle, donc il devrait avoir l etoile (*) du pointeur non ?
Apres j ai quasi le meme exercice, sauf qu lieu de renvoyer un tableau, il alloue et assigne un tableau d int, cela va etre la meme chose non ? Dans cette exercice la fonction aura un 'int' de plus (int **range), et celle ci pointera sur NULL si min > max, ensuite la taille de rang sera retourner, cela donnera ca ?
if (min > max)
range = NULL;
arr = malloc (range) * sizeof(int))
Apres j ai quasi le meme exercice, sauf qu lieu de renvoyer un tableau, il alloue et assigne un tableau d int, cela va etre la meme chose non ? Dans cette exercice la fonction aura un 'int' de plus (int **range), et celle ci pointera sur NULL si min > max, ensuite la taille de rang sera retourner, cela donnera ca ?
if (min > max)
range = NULL;
arr = malloc (range) * sizeof(int))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
Modifié par juliencolin54 le 18/09/2013 à 15:00
Modifié par juliencolin54 le 18/09/2013 à 15:00
En fait NULL n'est qu'une macro comme une autre.
C'est le préprocesseur qui la remplacera automatiquement dans ton code par
((void *)0) ou ((char *)0) (ça dépend de ton architecture), donc par 0.
Par réflexe j'utilise 0 à la place de NULL, car ça fait gagner de la place.
A toi de prendre l'habitude que tu veux. Le tout c'est de le comprendre et de savoir expliquer pourquoi tu met 0 à la place de null, et en quoi c'est "équivalent".
Pour ton deuxième exercice, est-ce que le prototype de la fonction serait
Software is like sex, it's better when it's free - Linus Torvald
C'est le préprocesseur qui la remplacera automatiquement dans ton code par
((void *)0) ou ((char *)0) (ça dépend de ton architecture), donc par 0.
Par réflexe j'utilise 0 à la place de NULL, car ça fait gagner de la place.
A toi de prendre l'habitude que tu veux. Le tout c'est de le comprendre et de savoir expliquer pourquoi tu met 0 à la place de null, et en quoi c'est "équivalent".
Pour ton deuxième exercice, est-ce que le prototype de la fonction serait
void ft_range(int **arr, int min, int max)?
Software is like sex, it's better when it's free - Linus Torvald
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
18 sept. 2013 à 15:14
18 sept. 2013 à 15:14
Est-ce que tu as une idée de comment le faire, ou as-tu testé quelque chose ?
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
18 sept. 2013 à 15:29
18 sept. 2013 à 15:29
C est pareil que pour le premier non ? Sauf que lorsque min > max ce sera un pointeur de range qui sera sur NULL, et ensuite pour retourner la taille de la range on mettre ca ? arr = malloc (range) * sizeof(int))--> Pas tout à fait, comme tu me l'as confirmé précédemment, la fonction de renverra rien (void).
Je te laisse réfléchir un peu et poster un code qui marche ou pas, pour que je te dises ce qu'il ne va pas.
Et pour le premier if quand min>max return 0, vu que c est un pointeur nul qui sera retourne pourquoi ne met on pas de pointeur ?
--> Je ne te l'ai pas expliqué deux post avant ? NULL est un pointeur... qui vaut 0.
Desole j avais mal compris que NULL etait un pointeur, j ai fais ca, est ce bon ?
int *ft_range(int min, int max)
{
int *arr; // Futur tableau d'int
int i;
if (min > max)
**range = NULL;
arr = malloc (range) * sizeof (int));
for (i = 0; i < ((max - min) + 1); i++)
arr[i] = min + i;
arr[i] = 0;
}
int main(int ac, char **av)
{
int *arr;
arr = ft_range(5, 10);
if (arr)
while (*arr)
printf("%d\n", *(arr++));
return (0);
}
int *ft_range(int min, int max)
{
int *arr; // Futur tableau d'int
int i;
if (min > max)
**range = NULL;
arr = malloc (range) * sizeof (int));
for (i = 0; i < ((max - min) + 1); i++)
arr[i] = min + i;
arr[i] = 0;
}
int main(int ac, char **av)
{
int *arr;
arr = ft_range(5, 10);
if (arr)
while (*arr)
printf("%d\n", *(arr++));
return (0);
}
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
18 sept. 2013 à 16:25
18 sept. 2013 à 16:25
C'est sensé être le code de ton premier ou deuxième exercice ?
Deuxieme, si tu demandes ca c est que ce n est pas bon lol, mais de ce que j ai compris c est presque la meme chose, on va juste changer le pointeur range qui retourne donc null, et renvoyer sa valeur ?
Desole pour le temps de reponse, je fais la piscine de 42, on voit pleins de choses en meme temps je ne sais plus ou donner de la tete
Desole pour le temps de reponse, je fais la piscine de 42, on voit pleins de choses en meme temps je ne sais plus ou donner de la tete
juliencolin54
Messages postés
217
Date d'inscription
dimanche 22 juillet 2012
Statut
Membre
Dernière intervention
1 octobre 2013
55
20 sept. 2013 à 08:43
20 sept. 2013 à 08:43
Pas de soucis,
En fait, je ne sais pas c'est quoi ton pointeur range, c'est ton double tableau d'entiers ?
En fait, je ne sais pas c'est quoi ton pointeur range, c'est ton double tableau d'entiers ?