L'inversion de Matrice en C?
Salut, j'essaie de mettre en place un inverse de la matrice de code mais il ne marche pas semblent travail et im vraiment pas pourquoi. Pour la boucle ne semble pas y travailler. Je ne sais pas pourquoi, parce que la logique semble assez bonne pour moi.
#include <stdio.h>
#include <string.h>
void reverse(char, int);
int main()
{
char a[100];
gets(a);
reverse(a, strlen(a)-1);
printf("%s\n",a);
getchar();
getchar();
getchar();
return 0;
}
void reverse(char ar[], int n)
{
char c;
int i = 0;
printf("n = %d" , n);
for ( i = 0; i >= n ; i++){
c = ar[i];
ar[i] = ar[n];
ar[n] = c;
printf("Processed");
n--;}
}
/*
if (begin >= n)
return;
c = *(x+begin);
*(x+begin) = *(x+n);
*(x+n) = c;
offs = x++;
printf("Begin = %d , n = %d, offs = %p \n", begin, n, offs);
reverse(x, ++begin, --n); */
Vous voudrez peut-être commencer par faire votre prototype correspondent à votre fonction réelle.
peut-être qu'il devrait être
Ci-dessous il y a une commenté code qui fonctionne quand je passe la 3 paramètres, mais je tiens à le limiter à simplement de passage 2 paramètres, la chaîne et sa longueur
Oh hasanovh merci!
Par curiosité seulement, pourquoi même passer la longueur. Êtes-vous envisager de l'appel de ce sur seulement une partie de la chaîne? Ou est invoquant
peut-être qu'il devrait être
i<=n
?!Ci-dessous il y a une commenté code qui fonctionne quand je passe la 3 paramètres, mais je tiens à le limiter à simplement de passage 2 paramètres, la chaîne et sa longueur
Oh hasanovh merci!
Par curiosité seulement, pourquoi même passer la longueur. Êtes-vous envisager de l'appel de ce sur seulement une partie de la chaîne? Ou est invoquant
strlen()
de reverse()
tout simplement pas dans la timonerie de cette mission?OriginalL'auteur JoC | 2013-10-11
Vous devez vous connecter pour publier un commentaire.
Votre boucle
devrait être
Éviter d'utiliser
gets()
utilisationfgets()
à la place.reverse
fonction de réellement prendre effet par la suite? parce que, pas le pointeur est envoyé en paramètre.Les tableaux sont tout simplement nommée adresses dans C. a Dit-l'adresse est passée comme un pointeur valeur pour la fonction. Ils sont l'exception à la transmission par valeur, l'idiome de C, mais pas vraiment. Leur "valeur" est leur adresse. La plupart des ingénieurs de l'appel de cette adresse synonymousness "pointeur de la décroissance", bien que je trouve le slogan généralement irritant, comme le mot "décroissance" apparaît exactement une fois dans l'ensemble du standard C99, et son apparence n'a absolument rien à voir avec le passage de tableaux à des fonctions.
COMME WhozCraig dit
Arrays are simply named addressed in C. Said-address is passed as a pointer value to the function
l'ajout de cet exemple pour WhozCriag explication. ideone.com/B9e5hGOriginalL'auteur Gangadhar
pour la condition de boucle doit être 'i < n'. et le prototype de déclaration doivent correspondre.
OriginalL'auteur Siddhartha Ghosh
pour la condition de boucle doit être 'i < n'. et le prototype de déclaration doivent correspondre.
et "int n" est la taille de la matrice. Donc, "i<=n" ferait la même matrice inversée à partir de la fin de la mi, et de nouveau à partir de la mi-haut. Donc le résultat est le même que le tableau. faire "n" comme la moitié de la taille de la matrice.
OriginalL'auteur TDK
Je pense que la meilleure utilisation de la macro pour cette tâche. Dans le code ci-dessous il s'agit d'une macro SWAP.
Contenu d'un fichier principal.c
Compilation:
Résultat:
Notes:
Basé sur
4.1 Définir une macro préprocesseur swap(t, x, y)
4.2 L'inversion d'une matrice En place
4.3 Les réponses sur cette question
Environnement de test
OriginalL'auteur Seti Volkylany