J'ai un tableau, les éléments à l'intérieur de ce tableau doivent être assignés au hasard puis je crée deux autres tableaux un pour les nombres impairs et un pour les nombres pairs en utilisant des pointeurs, je veux mettre les nombres impairs dans le tableau impair et les nombres pairs dans le tableau pair. comment puis-je l'attribuer à l'aide de pointeurs?
J'ai trouvé ceci:
int main()
{
int array[10];
int *arrayPtr = &array;
int arrayEven[10];
int *pEven = &arrayEven;
int arrayOdd[10];
int * pOdd = &arrayOdd;
int i, j;
for(i=0; i<10; i++)
{
array[i] =rand()%100 ;
if(array[i] %2 ==0)
{
printf("%d\n", array[i]);
printf("Even number");
}
else
{
printf("%d\n", array[i]);
printf("Odd number");
}
}
3 Réponses :
Pour que cela fonctionne, vous avez besoin de deux variables de couteur supplémentaires
int oddCount, evenCount;
, elles doivent être initialisées à 0 (c'est-à-dire le nombre pair / impair que vous avez inséré jusqu'à présent). Ensuite, lors de l'itération de votre premier tableau, vous incrémentez le couteur respectif si vous rencontrez un nombre pair / impair. Vous pouvez également simplement utiliser ces variables pour savoir où placer le prochain nombre pair / impair dans leur tableau respectif.
Ces déclarations de pointeurs
1 0 0 3 4 5 2 1 9 5 0 0 4 2 1 3 5 1 9 5
sont incorrectes. Les initialiseurs ont le type int (*) [10] selon les déclarations des tableaux comme par exemple de la variable array
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
enum { N = 10 };
int array[N];
int *arrayPtr = array;
srand( ( unsigned int )time( NULL ) );
for ( int *p = arrayPtr; p != arrayPtr + N; ++p )
{
*p = rand() % N;
}
for ( const int *p = arrayPtr; p != arrayPtr + N; ++p )
{
printf( "%d ", *p );
}
putchar( '\n' );
int arrayEven[10];
int *pEven = arrayEven;
int arrayOdd[10];
int *pOdd = arrayOdd;
int *pEvenEnd = pEven;
int *pOddEnd = pOdd;
for ( const int *p = array; p != arrayPtr + N; ++p )
{
if ( *p % 2 == 0 )
{
*pEvenEnd++ = *p;
}
else
{
*pOddEnd++ = *p;
}
}
for ( const int *p = pEven; p != pEvenEnd; ++p )
{
printf( "%d ", *p );
}
putchar( '\n' );
for ( const int *p = pOdd; p != pOddEnd; ++p )
{
printf( "%d ", *p );
}
putchar( '\n' );
return 0;
}
Je l'apprécie, merci. pouvez-vous s'il vous plait expliquer srand ((unsigned int) time (NULL)) de cette ligne; et pourquoi avez-vous utilisé enum au début?
@TasneemAkkad J'utilise une énumération pour attribuer des noms aux "nombres magiques". L'appel, de srand permet de générer des séquences de différence de nombres aléatoires.
Vous pouvez utiliser la comparaison binaire puisque tous les impairs se terminent par 1 en mode binaire:
If( a & 1) //Odd Else //Even
"J'ai un tableau et son pointeur" Pourquoi?
Bienvenue à SO. Vous ne devez pas utiliser
&lorsque vous prenez l'adresse de vos tableaux. Cela évaluera l'adresse correcte mais le type incorrect.Qu'avez-vous essayé de résoudre cette partie? Vous devez garder une trace du nombre de nombres pairs et impairs que vous avez déjà trouvés. Et BTW: Savez-vous que
arr [i]est identique à* (arr + i)? Pourrait rendre les choses plus lisibles ...Demandez simplement: est-ce un devoir scolaire ou quelque chose de similaire?
@Gerhardh Comment la conversion de
arr [i]en* (arr + i)rend le code plus lisible?Je suis étudiant et c'est assez nouveau pour moi alors excusez mon lac d'informations. @Bob__
@Ackdari Comment la syntaxe des tableaux le rend-il pas plus lisible? Je voulais faire remarquer à l'OP qu'ils peuvent utiliser le pointeur comme un tableau.
Vous a-t-on demandé d'utiliser explicitement des pointeurs? Cette tâche pourrait être facilement accomplie en utilisant quelques indices:
int i, j = 0, k = 0; pour (i = 0; i <10; ++ i) {if (array [i]% 2) {arrayOdd [j] = array [i]; ++ j;} autre {...} ...}. Êtes-vous censé écrire une fonction distincte pour effectuer le fractionnement?