En cas d’urgence poussez sur Code pour révéler la solution.
Créez un vecteur de 100 valeurs tirées aléatoirement selon une loi normale de moyenne 4 et d’écart type 5.
Identifiez les indices des valeurs strictement supérieures à 3 et récupérez les valeurs correspondantes.
Testez si la somme de ces valeurs est supérieure à 40, à 30 ou à 20 et affichez un message adéquat selon chaque éventualité.
Fonctions recommandées : rnorm(), which(),sum(), if(), ifelse(), else(), cat() ou print()
vecRandom <- rnorm(100, mean = 4, sd = 5)
vecAbove3 <- vecRandom[which(vecRandom > 3)]
valSum <- sum(vecAbove3)
if(valSum > 40){
cat("la somme est > 40 \n")
}else if(valSum > 30){
cat("la somme est > 30 mais <= 40 \n")
}else if(valSum > 20){
cat("la somme est > 20 mais <= 30 \n")
}else{
cat("la somme est < ou egal 20 \n")
}
la somme est > 40
# vous pouviez aussi obtenir le vecteur vecAbove3 avec la fonction ifelse():
vecRandom[ifelse(vecRandom >3, TRUE, FALSE)]
[1] 9.831163 5.097485 7.570858 8.379680 7.895459 4.528030 6.635265 14.148985 10.117416 5.494417 3.660705 10.393903 8.429158 3.941388 7.347816 3.854651 9.439607 3.142791 11.730595 5.937824 6.620842 7.693074 7.000316 3.828263 10.155291 3.378255 5.676205 3.980622 3.260252
[30] 13.804939 9.834127 3.829094 5.077376 7.957962 10.126434 5.872080 4.684765 5.691570 3.313544 10.133535 7.544846 3.565247 4.728646 5.437569 6.419119 6.488190 8.220307 6.595519 4.179922 11.686844 9.236451 4.654276 4.598193 6.463463 8.205123 7.518094 3.128161 7.597151
[59] 4.948454 3.687188 5.554846 9.143727 3.758206
i
qui affiche à chaque itération l’indice i
.Fonctions recommandées : for(), cat() ou print()
sumCumul <- 0
for(i in 1:10){
print(i) # always print the index of the result, we might prefer cat(), see below
sumCumul <- sumCumul + i
cat(paste("for i:", i, " ,the sumCumul is: ", sumCumul, "\n", sep=""))
}
[1] 1
for i:1 ,the sumCumul is: 1
[1] 2
for i:2 ,the sumCumul is: 3
[1] 3
for i:3 ,the sumCumul is: 6
[1] 4
for i:4 ,the sumCumul is: 10
[1] 5
for i:5 ,the sumCumul is: 15
[1] 6
for i:6 ,the sumCumul is: 21
[1] 7
for i:7 ,the sumCumul is: 28
[1] 8
for i:8 ,the sumCumul is: 36
[1] 9
for i:9 ,the sumCumul is: 45
[1] 10
for i:10 ,the sumCumul is: 55
[1] 55
calculSomme
qui calcule la somme de deux variables x et y passées en argument.Fonctions recommandées : function(), return()
calculSomme <- function(x, y){
return(x + y)
}
# test de la fonction avec par exemple 18 et 35:
calculSomme(x = 18, y = 35)
[1] 53
# pour aller plus loin:
# --------------------
# si vous voulez, vous pouvez definir avant un vecteur qui contiendra le resultat de la somme
sum_xandy <- NULL
calculSomme <- function(x, y){
sum_xandy <- x+y
return(sum_xandy)
}
sum_xandy <- calculSomme(x = 18, y = 35) # le resultat est stocke dans l'objet sum_xandy qui n'est plus NULL
sum_xandy # affichez le resultat
[1] 53
# si maintenant, vous voulez repeter l'operation et stocker les resultats dans un vecteur, il faut concatener les resultats dans un vecteur
sum_xandy <- NULL
calculSomme <- function(x, y){
sum_xandy <- c(sum_xandy, x+y)
return(sum_xandy)
}
sum_xandy <- calculSomme(x = 18, y = 35)
sum_xandy <- calculSomme(x = 20, y = 35)
sum_xandy <- calculSomme(x = 18, y = 3)
# le resultat est stocke dans l'objet sum_xandy qui n'est plus NULL
sum_xandy
[1] 53 55 21
calculTarif
qui prend pour argument un âge et affiche “demi-tarif” si l’âge est inférieur à 12 ans, “tarif sénior” si l’âge est supérieur ou égal à 60 ans et “plein tarif” sinon.Fonctions recommandées :
function()
,return()
,print()
,c()
if()
else()
ifelse()
for()
calculTarif <- function(age){
if(age < 12){
print("tarif reduit")
}else if(age >= 60){
print("tarif senior")
}else{
print("plein tarif")
}
}
# tests de la fonction
for(i in c(5, 65, 85, 41, 23, 47)){
calculTarif(age = i)
}
[1] "tarif reduit"
[1] "tarif senior"
[1] "tarif senior"
[1] "plein tarif"
[1] "plein tarif"
[1] "plein tarif"
Ecrivez une fonction sumCumul
qui calcule la somme cumulée des nombres entiers compris entre deux bornes \(a\) et \(b\) que vous mettrez en arguments start
et end
.
De plus, toutes les 10 boucles, vous affichez la valeur de l’entier ajouté, sinon vous affichez un point .
.
Testez la fonction avec les entiers entre 3 et 55 par exemple.
Améliorez la fonction en ajoutant un paramètre interval
correspondant à l’incrément de boucles entre les affichages des entiers (dans la fonction précédente, cet incrément était de 10) Testez la fonction avec les entiers entre 3 et 55 et un intervalle de 15 par exemple.
Fonctions recommandées :
function()
,return()
,cat()
,seq()
sumCumul <- function(start,end){
temp <- 0
for(i in start:end){
temp <- temp + i
if (i %in% seq(start,end,10)){
cat(i)
}
else {cat(".")}
}
cat("\n")
cat(paste("le total cumule est de: "), temp, "\n",sep="")
return(temp)
}
res <- sumCumul(3,55)
3.........13.........23.........33.........43.........53..
le total cumule est de: 1537
#3.........13.........23.........33.........43.........53..
#le total cumule est de: 1537
#
# fonction amelioree avec un intervalle en argument:
sumCumul <- function(start,end, interval){
temp <- 0
for(i in start:end){
temp <- temp + i
if (i %in% seq(start,end,interval)){
cat(i)
}
else {cat(".")}
}
cat("\n")
cat(paste("le total cumule est de: "), temp, "\n",sep="")
return(temp)
}
res <- sumCumul(3,55,15)
3..............18..............33..............48.......
le total cumule est de: 1537