• Nenhum resultado encontrado

Conditions et fonctions

N/A
N/A
Protected

Academic year: 2023

Share "Conditions et fonctions"

Copied!
17
0
0

Texto

(1)

Conditions et fonctions

Algo & Prog avec R

A. Malapert, B. Martin, M. Pelleau, et J.-P. Roy 11 septembre 2021

Université Côte d’Azur, CNRS, I3S, France firstname.lastname@univ-cotedazur.fr

(2)

Conditionnelle : la prise de décisions if

L’instruction conditionnelleifpermet de prendre une décision.

Dans l’éditeur

a < - -2 i f ( a > 0) {

cat( a ,’ est p o s i t i f \ n ’) } e l s e {

cat( a ,’ est n e g a t i f ou nul \ n ’) }

−−→

RUN -2 est négatif ou nul

Au toplevel

C’est moins agréable, il faut faire attention au(x) saut(s) de ligne.

> a < - -2

> i f( a>0) {cat( a ,’ est p o s i t i f \ n ’) }

> e l s e {cat( a ,’ est n e g a t i f ou nul \ n ’) }

−−→

RUN Erreur : ’else’

inattendu(e) in "else"

1/15

(3)

Bloc et indentation

Syntaxe pour une instruction conditionelle

i f ( c o n d i t i o n ) { b l o c I n s t r u c t i o n s } e l s e {

b l o c I n s t r u c t i o n s }

Indentation

La bonne distance à la marge d’une ligne permet de structurer et de comprendre un programme.

Bloc d’instructions

C’est une suite d’instructions délimitée par des accolades.

a < - -2 i f ( a > 0) {

cat( a ,’ est p o s i t i f \ n ’) } e l s e {

cat( a ,’ est n e g a t i f ou nul \ ’) }

2/15

(4)

Attention aux parenthèses et accolades !

Une utilisation correcte des accolades est obligatoire en R Il est nécessaire d’ouvrir et fermer les paires d’accolades : {. . . }.

a < - -2 i f ( a > 0) {

cat( a ,’ est p o s i t i f \ n ’) e l s e {

cat( a ,’ est n e g a t i f ou nul \ n ’) }

−−→

RUN Erreur : ’else’

inattendu(e) in "else"

Une utilisation correcte des parenthèses est obligatoire en R Une paire de parenthèses doit toujours délimiter la condition duif: (. . .).

a < - -2 i f a > 0 {

cat( a ,’ est p o s i t i f \ n ’) } e l s e {

cat( a ,’ est n e g a t i f ou nul \ n ’) }

−−→

RUN Erreur : unexpected symbol in "if a"

3/15

(5)

Opérateurs logiques : ET (&&) et OU (||)

Table de vérité : ces opérateurs ressemblent à ceux de la Logique.

p TRUE TRUE FALSE FALSE

q TRUE FALSE TRUE FALSE

p && q TRUE FALSE FALSE FALSE p || q TRUE TRUE TRUE FALSE

Mais, ils sont court-circuités

> a < - -2

> x = = 3

E r r e u r : o b j e t ’ x ’ i n t r o u v a b l e

> ( a > 0) & & ( x= =3) [1] F A L S E

L’expressionx = = 3 n’a pas été évaluée car FALSE && ? == FALSE La priorité de&&étant plus faible que celle des opérations arithmétiques, on aurait pu écrire :a > 0 & & x = = 3 .

4/15

(6)

Liens avec l’électronique numérique

L’opérateur||est aussi court-circuité

> a < - -2

> x = = 3

E r r e u r : o b j e t ’ x ’ i n t r o u v a b l e

> ( a < 0) || ( x= =3) [1] T R U E

carTRUE || ? == TRUE

Portes logiques en électronique

L’opérateur!inverse les valeursTRUE etFALSE. C’est l’inverseur . . . Les constructeurs d’ordinateurs utilisent beaucoup laporte nand.

5/15

(7)

Les fonctions prédéfinies de R

Tous les langages de programmation fournissent un large ensemble de fonctions prêtes à être utilisées.

Exemples dans les entiers

> abs(-5) # la f o n c t i o n " v a l e u r a b s o l u e "

5

> ’+(4 ,9) # l e s op é r a t e u r s s o n t d e s f o n c t i o n s c a c h é es 13

Certaines fonctions résident dans desmodules/packages spécialisés, commeTurtleGraphicsoushiny. . .

> t u r t l e_f o r w a r d ( d i s t=15) # je v e u x r é a l i s e r un g r a p h i s m e t o r t u e

E r r e u r : i m p o s s i b l e de t r o u v e r la f o n c t i o n " t u r t l e_f o r w a r d "

> l i b r a r y( T u r t l e G r a p h i c s ) # il f a u t c h a r g e r l ’ e x t e n s i o n

> t u r t l e_i n i t ()

> t u r t l e_f o r w a r d ( d i s t=15)

6/15

(8)

Comment définir une nouvelle fonction ?

Syntaxe pour la définition d’une fonction

Une fonction est une routine qui retourne une valeur.

n o m F o n c t i o n < - f u n c t i o n( l i s t e D e P a r a m è t r e s ) { b l o c I n s t r u c t i o n s

r e t u r n( r é s u l t a t F o n c t i o n ) }

Le motreturnsignifie "le résultat est . . . ".

Définir la fonctionf(n)→2n−1

> f < - f u n c t i o n( n ) {r e t u r n( 2*n - 1) }

> f (5) [1] 9

Paramètres non typés :nn’est pas forcément un entier.

> f (5.2) # a v e c d e s r é e l s a p p r o c h é s 9.4

> f (c o m p l e x(r e a l = 1 , i m a g i n a r y = 1) ) # a v e c d e s c o m p l e x e s [1] 1+2 i

7/15

(9)

Les choix multiples avec if ... else if ... else ...

f < - f u n c t i o n( x ) { i f( x < -1) r e t u r n(-1) e l s e i f( x > 1) r e t u r n(1) e l s e r e t u r n( x )

}

ou de manière équivalente

f < - f u n c t i o n( x ) { i f( x < -1) r e t u r n(-1) e l s e {

i f( x > 1) r e t u r n(1) e l s e r e t u r n( x ) }

}

x y

-1

1 -1 1

8/15

(10)

Exemples

Comment (re)définir la valeur absolue ?

Abs < - f u n c t i o n( n ) { i f( n>0) {

r e t u r n( n ) } e l s e {

r e t u r n (-n ) }

}

> cat(’ |-5| v a u t ’, Abs (-5) , ’ \ n ’)

|-5| v a u t 5

Comment (re)définir le maximum ?

Max < - f u n c t i o n( n , m ) { i f( n > m ) {

r e t u r n( n ) } e l s e {

r e t u r n ( m ) }

}

> cat(’ max (-10 , -5) v a u t ’, Max (-10 , -5) , ’ \ n ’)

max(-10 , -5) v a u t -5

9/15

(11)

Exemple : année bissextile

Depuis l’ajustement du calendrier grégorien, l’année sera bissextile (elle aura 366 jours, et non 365) :

I si l’année est divisible par 4 et non divisible par 100, ou I si l’année est divisible par 400.

Comment calculer le nombre de jours d’une année ?

J o u r s P a r A n < - f u n c t i o n( n ) {

i f((( n %% 4 = = 0) & & ( n %% 100 ! = 0) ) || ( n %% 400 = = 0) ) { r e t u r n( 3 6 6 )

} e l s e { r e t u r n( 3 6 5 ) }

}

Remarquez l’utilisation correcte des parenthèses.

10/15

(12)

Notions élémentaires sur les nombres premiers

Nombre premier

Un nombre premier ne peut être divisé que par lui-même et par 1.

Plus grand commun diviseur (PGCD)

Le PGCD de deux nombres entiers non nuls est le plus grand entier qui les divise simultanément.

Premiers entre eux

on dit que deux entiers sont premiers entre eux si leur plus grand commun diviseur est égal à 1.

Supposons que la fonctiongcd(p, q)existe et renvoie le plus grand diviseur commun des entierspet q(nous la programmerons en TP).

11/15

(13)

Composition de fonctions I

Créons une fonctionPremiersEntreEux(p,q)basée sur la fonctiongcd.

P r e m i e r s E n t r e E u x < - f u n c t i o n( p ,q) { i f ( gcd ( p ,q) = = 1) {

r e t u r n( T R U E ) } e l s e {

r e t u r n( F A L S E ) }

}

ou encore

P r e m i e r s E n t r e E u x < - f u n c t i o n ( p ,q) { i f ( gcd ( p ,q) = = 1) {

r e t u r n( T R U E ) }

r e t u r n( F A L S E ) }

Le mot cléreturnprovoque un échappement. Le reste du texte de la fonction est abandonné !

12/15

(14)

Composition de fonctions II

Une version qui renvoie directement le résultat de l’évaluation de l’expression.

P r e m i e r s E n t r e E u x < - f u n c t i o n( p ,q) { r e t u r n( gcd ( p ,q) = = 1)

}

Une version encore plus courte qui omet les accolades etreturn.

P r e m i e r s E n t r e E u x < - f u n c t i o n( p ,q) gcd ( p ,q) = = 1

> P r e m i e r s E n t r e E u x (21 ,6) [1] F A L S E

> P r e m i e r s E n t r e E u x (21 ,8) [1] T R U E

Vous voyez qu’il existe différentes manières de coder une fonction. Elles se distinguent par leurefficacité, mais aussi leurélégance.

13/15

(15)

Documenter une fonction

Pour l’instant

Ajouter simplement des commentaires au début de la fonction.

P r e m i e r s E n t r e E u x < - f u n c t i o n( p ,q) {

# D é t e r m i n e si d e u x e n t i e r s p et q s o n t p r e m i e r s e n t r e e u x p a r c a l c u l du P G C D.

#

# A r g u m e n t s:

# p un e n t i e r

# q un e n t i e r

#

# R e t u r n s: T R U E si p et q s o n t p r e m i e r s e n t r e eux , et F A L S E s i n o n.

. . . }

En effet, il suffit detaper le nom d’une fonction pour voir son code.

14/15

(16)

Consulter la documentation de R

> ?p a s t e # c o n s u l t e r la d o c u m e n t a t i o n d ’ u n e f o n c t i o n C o n c a t e n a t e S t r i n g s

D e s c r i p t i o n:

C o n c a t e n a t e v e c t o r s a f t e r c o n v e r t i n g to c h a r a c t e r .

U s a g e:

p a s t e (. . ., sep = " ", c o l l a p s e = N U L L ) p a s t e 0 (. . ., c o l l a p s e = N U L L )

A r g u m e n t s: . . .

> ??p a s t e # r e c h e r c h e r d a n s la d o c u m e n t a t i o n

15/15

(17)

Questions?

Retrouvez ce cours sur le site web www.i3s.unice.fr/~malapert/R

15/15

Referências

Documentos relacionados

1.1 O presente processo de seleção destina-se à formação de cadastro de reserva (CR) para contratações nos cargos de TÉCNICO SUPERIOR OPERACIONALE TÉCNICO OPERACIONAL,