if ( j & 1 || ! strstr ( " \t" , F ) )

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

if ( j & 1 || ! strstr ( " \t" , F ) )

Message par Patrick88 »

c'est du C , qui peut me dire en clair ce que ça veut dire :

int j et char F [ 2 ]

-> ça if ( j & 1 || ! strstr ( " \t" , F ) )

les || ! &
( & = and , et logique )
( ! = not comme dans != not égale )
mais || j'ai zoublié

qu'est que ça peut bien donné comme résultat

sachant que

strstr est une fonction définie par l'utilisateur
qui recherche " \t" dans le buffer F et renvoie la 1ere position de l'argument dans le buffer, si pas trouvé renvoit 0

j=résultat d'un incrément .

:?:

patrick88
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

|| c'est pas un OU logique, ça?
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

si j est impair ou que strstr("\t", ...) retourne 0

Dri
Patrick88
Messages : 1564
Inscription : mer. 21/janv./2004 18:24

Message par Patrick88 »

ok , c'est noté merci

euh ! 8O et comment on dit impair en purebasic !?

patrick
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Fais un Modulo (a % b)
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Patrick88 a écrit :ok , c'est noté merci

euh ! 8O et comment on dit impair en purebasic !?

patrick

Code : Tout sélectionner

a = 3

b = 6

If a & 1
  Debug "a est impair"
Else
  Debug "a est pair"
EndIf

If b & 1
  Debug "b est impair"
Else
  Debug "b est pair"
EndIf
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Denis, pourquoi a & 1

Code : Tout sélectionner

a = 3 

b = 6 

If a % 2
  Debug "a est impair"
Else
  Debug "a est pair"
EndIf

If b % 2
  Debug "b est impair"
Else
  Debug "b est pair"
EndIf
On a assez ralé pour l'avoir, la fonction Modulo, il me semble :lol:

Et finalement, qu'est-ce qu'un nombre pair, sinon un nombre divisible par 2 :wink:
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

sans doute parce que le modulo est deux fois plus lent :)

Code : Tout sélectionner

a = 3 
b = 6 
c=10000000
temps=ElapsedMilliseconds()
For i=1 To c
a & 2 
b & 2 
Next i
total = ElapsedMilliseconds()-temps
Debug total

temps=ElapsedMilliseconds()
For i=1 To c
  a % 2 
  b % 2 
Next i
total = ElapsedMilliseconds()-temps
Debug total
http://purebasic.developpez.com/
Je ne réponds à aucune question technique en PV, utilisez le forum, il est fait pour ça, et la réponse peut profiter à tous.
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Meuuuh non!!! , à peine une seconde de différence entre les deux
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Chris a écrit :Denis, pourquoi a & 1
Et bien il faut pour comprendre reprendre la correspondance décimal/bianire.

Je vais prendre quelques nombres simples.


de décimal en binaire
0 --> 0000
1 --> 0001
2 --> 0010
3 --> 0011
4 --> 0100
5 --> 0101
6 --> 0110
7 --> 0111
etc

si je fait un & 1 avec ces nombres (Et logique)
0 --> 0000 & 0001 = 0000
1 --> 0001 & 0001 = 0001
2 --> 0010 & 0001 = 0000
3 --> 0011 & 0001 = 0001
4 --> 0100 & 0001 = 0000
5 --> 0101 & 0001 = 0001
6 --> 0110 & 0001 = 0000
7 --> 0111 & 0001 = 0001
En regardant bien, tous les nombres impairs ont le bit de poids faible toujours à 1 et les nombres pairs ce même bit toujours à 0. Il suffit donc de tester ce bit avec un ET logique de valeur 1 pour trouver ou non la parité. Ceci est valable quel que soit le nombre.
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Génial, ton idée Denis :D
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Le Soldat Inconnu a écrit :Génial, ton idée Denis :D
Ouais, et en plus, c'est nettement plus rapide.

1 à 1,5 seconde de différence, c'est quand même pas rien, quand onvoit que pour certains code, il y en a qui chipotent pour 2 ou 3 millisecondes sur le même nombre de boucles. :lol:
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

2 ou 3 millisecondes
c'est significatif ça 8O :roll:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Denis a écrit :si je fait un & 1 avec ces nombres (Et logique)
Concretement, si j'avais osé dire ca devant mon prof d'électronique je me serait fait trucider (ca remonte à quelques années maintenant ^^)

c'est surtout pas un et "logique" mais plutot binaire puisque comme tu l'as montré il applique le ET à chaque bit des deux nombres...

un et logique (&& en C, And en PB) teste à faux... faux c'est 0, vrai c'est tout le reste...

Code : Tout sélectionner

A = %01 ;A=1
B = %10 ;B=2

;Test binaire, il va retourner faux car A et B n'ont aucun 1 en commun
If A&B
  Debug "Binaire"
EndIF

;Test logique, il va retourner vrai car ni A ni B n'est faux, n'est égal à zéro
If A And B
  Debug "Logique"
Endif
Dri
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

Tout à fait Dri, c'est une erreur de langage de ma part mais bon, je ne suis plus à ça près :mrgreen:
Répondre