Permutation de deux variables en pascal
Résolu/Fermé
kakashininjamaster
Messages postés
189
Date d'inscription
samedi 30 mai 2009
Statut
Membre
Dernière intervention
10 septembre 2014
-
20 déc. 2009 à 08:21
kakashininjamaster Messages postés 189 Date d'inscription samedi 30 mai 2009 Statut Membre Dernière intervention 10 septembre 2014 - 23 déc. 2009 à 07:22
kakashininjamaster Messages postés 189 Date d'inscription samedi 30 mai 2009 Statut Membre Dernière intervention 10 septembre 2014 - 23 déc. 2009 à 07:22
Bonjour,
Je Veut permuter deux variables dans pascal mais sans l'utilisation d'un variable auxiliaire.
les variable sont se type caractère 'char' et 'bolean'
Je Veut permuter deux variables dans pascal mais sans l'utilisation d'un variable auxiliaire.
les variable sont se type caractère 'char' et 'bolean'
A voir également:
- Algorithme qui permet de permuter deux variables
- Deux ecran pc - Guide
- Faire deux colonnes sur word - Guide
- Itinéraire google map entre deux adresses - Guide
- Deux whatsapp sur un téléphone - Guide
- I deux point ✓ - Forum Windows
9 réponses
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
22 déc. 2009 à 23:35
22 déc. 2009 à 23:35
Bon alors, après avoir planché sur ta question voici ma conclusion.
On peut permuter n'importe quels entiers A et B positifs qui vont de 0 à N-1 en faisant :
Donc avec des char ça donne :
On peut permuter n'importe quels entiers A et B positifs qui vont de 0 à N-1 en faisant :
A := (A+B) mod N; B := (A-B) mod N; A := (A-B) mod N;
Donc avec des char ça donne :
A := ord (num(A)+num(B)) mod 256); B := ord((num(A)-num(B)) mod 256); A := ord((num(A)-num(B)) mod 256);
kakashininjamaster
Messages postés
189
Date d'inscription
samedi 30 mai 2009
Statut
Membre
Dernière intervention
10 septembre 2014
26
22 déc. 2009 à 07:02
22 déc. 2009 à 07:02
j'ai touvé ça mais je n'ai pas pu permuter deux variables de type char :
Pour les types "Réel" et "Entier"
0/Début PERMUT_Re_IN
1/Ecrire ("Saisir A"),lire(A)
2/Ecrire ("Saisir B"),lire(B)
3/<-A+B
4/A<-ABS(A-(A-B))
5/Ecrire(A)
6/Ecrire(B)
7/FIN PERMUT_Re_IN
Pour les types "Chaîne de caractères"
0/Début PERMUT_String
1/Ecrire ("Saisir A"),lire(A)
2/Ecrire ("Saisir B"),lire(B)
3/A<-CONCAT(A,B)
4/B<-COPY(A,1,(LENGTH(A)-LENGTH(B)))
5/DELETE(A,(LENGTH(A)-LENGTH(B)),LENGTH(B))
5/Ecrire(A)
6/Ecrire(B)
7/FIN PERMUT_String
Pour les types "Booléen"
0/Début PERMUT_Boolean
1/Ecrire ("Saisir A"),lire(A)
2/Ecrire ("Saisir B"),lire(B)
3/A <- A Xor B
4/B <- B Xor A
5/A <- A Xor B
6/Ecrire(A)
7/Ecrire(B)
8/FIN PERMUT_Boolean
Pour les types "Réel" et "Entier"
0/Début PERMUT_Re_IN
1/Ecrire ("Saisir A"),lire(A)
2/Ecrire ("Saisir B"),lire(B)
3/<-A+B
4/A<-ABS(A-(A-B))
5/Ecrire(A)
6/Ecrire(B)
7/FIN PERMUT_Re_IN
Pour les types "Chaîne de caractères"
0/Début PERMUT_String
1/Ecrire ("Saisir A"),lire(A)
2/Ecrire ("Saisir B"),lire(B)
3/A<-CONCAT(A,B)
4/B<-COPY(A,1,(LENGTH(A)-LENGTH(B)))
5/DELETE(A,(LENGTH(A)-LENGTH(B)),LENGTH(B))
5/Ecrire(A)
6/Ecrire(B)
7/FIN PERMUT_String
Pour les types "Booléen"
0/Début PERMUT_Boolean
1/Ecrire ("Saisir A"),lire(A)
2/Ecrire ("Saisir B"),lire(B)
3/A <- A Xor B
4/B <- B Xor A
5/A <- A Xor B
6/Ecrire(A)
7/Ecrire(B)
8/FIN PERMUT_Boolean
kakashininjamaster
Messages postés
189
Date d'inscription
samedi 30 mai 2009
Statut
Membre
Dernière intervention
10 septembre 2014
26
23 déc. 2009 à 07:22
23 déc. 2009 à 07:22
Salut
Enfin j'ai trouver le solution parce même avec ord('a)+ord('b') on obtient une caractère donc cette manupilation devrait fonctionner :
program radh ;
uses wincrt ;
var a,b : char ;
begin
readln(a);
readln(b);
a := chr(ord(a)+ord(b));
b:= chr(ord(a)-ord(b));
a:=chr(ord(a)-ord(b) );
writeln(a);
writeln(b);
end.
Merci beaucoup KX pour tes grand efforts et .... Merci une autre fois ;)
Enfin j'ai trouver le solution parce même avec ord('a)+ord('b') on obtient une caractère donc cette manupilation devrait fonctionner :
program radh ;
uses wincrt ;
var a,b : char ;
begin
readln(a);
readln(b);
a := chr(ord(a)+ord(b));
b:= chr(ord(a)-ord(b));
a:=chr(ord(a)-ord(b) );
writeln(a);
writeln(b);
end.
Merci beaucoup KX pour tes grand efforts et .... Merci une autre fois ;)
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
22 déc. 2009 à 11:46
22 déc. 2009 à 11:46
Bon, je ne vois toujours pas l'intérêt de faire ce genre de chose, mais si tu y arrives avec un type entier, tu peux le faire facilement avec ton char avec les fonctions ord et num qui font les conversions integer<->char
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
20 déc. 2009 à 21:32
20 déc. 2009 à 21:32
Merci pour cet exemple de bidouille monstrueuse et inutile, j'en avais même pas trouvé ;-)
Si on parlait de données plus volumineuses je te conseillerai l'utilisation de pointeurs, il y aurait alors une permutation avec un pointeur intermédiaire.
Mais la taille d'un pointeur en mémoire doit-être à peu près celle d'un integer (donc plus grande qu'un char ou un booléen) donc il n'y a vraiment pas besoin de sortir les pointeurs dans ce cas précis.
D'ailleurs je ne vois vraiment pas l'intérêt de chercher à faire une permutation de types primitifs autrement qu'avec une variable intermédiaire...
Si on parlait de données plus volumineuses je te conseillerai l'utilisation de pointeurs, il y aurait alors une permutation avec un pointeur intermédiaire.
Mais la taille d'un pointeur en mémoire doit-être à peu près celle d'un integer (donc plus grande qu'un char ou un booléen) donc il n'y a vraiment pas besoin de sortir les pointeurs dans ce cas précis.
D'ailleurs je ne vois vraiment pas l'intérêt de chercher à faire une permutation de types primitifs autrement qu'avec une variable intermédiaire...
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
22 déc. 2009 à 20:34
22 déc. 2009 à 20:34
Tu as essayé avec chr((ord(a)+ord(b)) mod 256) ?
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
20 déc. 2009 à 17:24
20 déc. 2009 à 17:24
Tu ne peux pas le faire à moins d'une bidouille monstrueuse et inutile.
tu peux le faire en passant par un bloc d'assembleur : ton char ou ton booléen tient sans problème dans AL
kakashininjamaster
Messages postés
189
Date d'inscription
samedi 30 mai 2009
Statut
Membre
Dernière intervention
10 septembre 2014
26
22 déc. 2009 à 20:09
22 déc. 2009 à 20:09
mais quand on fait chr (ord (a)+ord(b)) chr ne fonctionne pas car l'entier débasse le dernier entier dans le tableau des codes ASCII
23 déc. 2009 à 01:29