Compare commits

..

17 Commits

Author SHA1 Message Date
4e700efb76 Exercice vérification ISBN 2019-06-26 18:21:42 +02:00
0322d823a2 Exercice tableau 2019-06-26 17:57:18 +02:00
1c1f3b6a3a Exercice java 2019-06-24 19:28:01 +02:00
f8cf339f65 Fibonacci recursif 2019-06-22 16:37:38 +02:00
f816fd180f Fix afficher 2019-06-22 08:22:46 +02:00
64af6ce32e Notes cours java 2019-06-22 08:07:47 +02:00
a88103d6c7 Exercice Fibonacci boucle 2019-06-18 23:38:53 +02:00
92cbcae4cf Exercice analyse de code 2019-06-17 20:08:44 +02:00
b65325911b Exercice nombres Romains 2019-06-17 18:47:17 +02:00
546c2f4b7e Exercice Fibonacci 2019-06-17 18:28:53 +02:00
68fa123bfe Exercice FizzBuzz 2019-06-17 17:38:16 +02:00
7843ea57c2 Exercice somme entre 2 entiers 2019-06-17 17:37:53 +02:00
c02cfdbac6 Exercice palindrome 2019-06-16 16:11:59 +02:00
eccfbfb469 Exercice Iban 2019-06-16 14:28:14 +02:00
4f36b03f17 Exercice FizzBuzz 2019-06-02 14:27:13 +02:00
9fef1423e6 Modulo 2019-06-01 18:51:12 +02:00
ca1af85a71 Exercice: somme entre 2 entiers 2019-06-01 18:46:41 +02:00
15 changed files with 444 additions and 25 deletions

22
Accents.java Normal file
View File

@ -0,0 +1,22 @@
import static utils.Utils.*;
public class Accents {
private static final String TEST =
"Avec la mer du Nord pour dernier terrain vague,\n"+
"Et des vagues de dunes pour arrêter les vagues,\n"+
"Et de vagues rochers que les marées dépassent,\n"+
"Et qui ont à jamais le coeur à marée basse.\n"+
"Avec infiniment de brumes à venir\n"+
"Avec le vent d'ouest écoutez le tenir\n"+
"Le plat pays qui est le mien.\n";
public static final void main(String[] args) {
afficher("Accents");
char[] test = TEST.toCharArray();
afficher(String.valueOf(test));
}
}

38
Analyse1.java Normal file
View File

@ -0,0 +1,38 @@
import static utils.Utils.*;
public class Analyse1 {
public static final void main(String[] args) {
afficher("Analyse 1");
int[] tab1 = new int[] { 12, 0, 5, 21 };
afficher("tab1:");
maFonction(tab1);
int[] tab2 = new int[] { 81, 13, 100, 4 };
afficher("tab2:");
maFonction(tab2);
}
public static void maFonction(int[] tab){
int m1 = 0;
int m2 = 0;
for (int i = 0; i < tab.length; i++) {
int n = tab[i];
if (m1 < n) {
m2 = m1;
m1 = n;
} else if (m2 < n) {
m2 = n;
}
}
afficher(m1);
afficher(m2);
}
}

View File

@ -13,16 +13,7 @@ public class CesarChiffre {
// int position(char c): retourne la position de la lettre dans l'alphabet // int position(char c): retourne la position de la lettre dans l'alphabet
// (à partir de 0) // (à partir de 0)
char[] out = new char[in.length]; return in;
for (int i = 0; i<in.length; i++) {
char c = in[i];
if (c == ' ') {
out[i] = c;
} else {
out[i] = ALPHABET[(position(c)+cle) % ALPHABET.length];
}
}
return out;
} }
} }

View File

@ -13,16 +13,7 @@ public class CesarDechiffre {
// int position(char c): retourne la position de la lettre dans l'alphabet // int position(char c): retourne la position de la lettre dans l'alphabet
// (à partir de 0) // (à partir de 0)
char[] out = new char[in.length]; return in;
for (int i = 0; i<in.length; i++) {
char c = in[i];
if (c == ' ') {
out[i] = c;
} else {
out[i] = ALPHABET[(ALPHABET.length+position(c)-cle) % ALPHABET.length];
}
}
return out;
} }
} }

View File

@ -85,6 +85,15 @@ Une variable de type booléen prend comme valeur VRAI (`true`) ou FAUX (`false`)
Une variable de type entier peut prendre comme valeur l'ensemble des nombres entiers signés. Les opérations associées sont les opérations usuelles `+`, `-`, `*`, `/`. Une variable de type entier peut prendre comme valeur l'ensemble des nombres entiers signés. Les opérations associées sont les opérations usuelles `+`, `-`, `*`, `/`.
L'operateur modulo (`%`) permet d'obtenir le reste de la division euclidienne entre 2 entiers.
a = 5
b = 2
a%b == 1
5 divisé par 2 est égal à 2 avec un reste de 1
### Réels ### Réels
Une variable de type réel peut prendre comme valeur l'ensemble des nombres réels. Les opérations associées sont les opérations usuelles `+`, `-`, `*`, `/`. Une variable de type réel peut prendre comme valeur l'ensemble des nombres réels. Les opérations associées sont les opérations usuelles `+`, `-`, `*`, `/`.
@ -342,3 +351,28 @@ Certains langages sont dédiés à la manipulation de données (lecture, créati
D'autres langages sont utilisés pour la création de documents (HTML) ou la mise en page (CSS). D'autres langages sont utilisés pour la création de documents (HTML) ou la mise en page (CSS).
Certains langages sont dit "embarqués", car ils ne sont pas exécutés directement sur le processeur mais au sein d'un autre logiciel (par exemple javascript dans un navigateur). Certains langages sont dit "embarqués", car ils ne sont pas exécutés directement sur le processeur mais au sein d'un autre logiciel (par exemple javascript dans un navigateur).
# Cours java
Sommaire: https://www.jmdoudoux.fr/java/dej/index.htm
Chapitres essentiels
* https://www.jmdoudoux.fr/java/dej/chap-presentation.htm 1.1
* https://www.jmdoudoux.fr/java/dej/chap-techniques-base.htm 2.1 (voir plus tard)
* https://www.jmdoudoux.fr/java/dej/chap-syntaxe.htm parcourir rapidement, revenir pour les détails
* https://www.jmdoudoux.fr/java/dej/chap-poo.htm gros morceau objet, voir en plusieurs fois, avec exercices
* https://www.jmdoudoux.fr/java/dej/chap-packages-base.htm packages de bases, filtrer les classes utiles
* https://www.jmdoudoux.fr/java/dej/chap-math.htm maths, pas indispensable
* https://www.jmdoudoux.fr/java/dej/chap-exceptions.htm exceptions, important
* https://www.jmdoudoux.fr/java/dej/chap-jdk1.5.htm spécificités java 5, voir rapidement, revenir après collections
* https://www.jmdoudoux.fr/java/dej/chap-annotations.htm voir plus tard
* https://www.jmdoudoux.fr/java/dej/chap-java7.htm specificités java 7, voir rapidement
* https://www.jmdoudoux.fr/java/dej/chap-lambdas.htm voir plus tard
* https://www.jmdoudoux.fr/java/dej/chap-collections.htm collections
Autres sujets:
* https://www.jmdoudoux.fr/java/dej/chap-normes-dev.htm normes de développement, utile à connaître
* https://www.jmdoudoux.fr/java/dej/chap-utilisation_dates.htm dates, voir surtout la nouvelle API
* https://www.jmdoudoux.fr/java/dej/partie15.htm tests unitaires, voir principalement Junit4/5

View File

@ -97,16 +97,103 @@ Exemple:
## Exercice 7 ## Exercice 7
Pour 2 entiers donnés (n et p), retourner la somme des entiers entre ces 2 entiers (compris).
Exemples:
n = 3
p = 7
somme = 3 + 4 + 5 + 6 +7 = 25
=> Somme2.java
## Exercice 8
Écrire un programme qui affiche les nombres de 1 à 199. Mais pour les multiples de 3, afficher “Fizz” au lieu du nombre et pour les multiples de 5 afficher “Buzz”. Pour les nombres multiples de 3 et 5, afficher “FizzBuzz”.
Exemple:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
...
=> FizzBuzz.java
## Exercice 9
Que fait maFonction dans Analyse1.java?
## Exercice 10
Afficher la suite de Fibonacci.
Il sagit dune suite de nombres dans laquelle tout nombre (à partir du troisième) est égal à la somme des deux précédents:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89,…
Écrire ensuite une solution avec une fonction récursive.
=> Fibonacci.java
## Exercice 11
Convertir un nombre romain en entier (avec "chiffre" romains I, V et X).
=> Romain.java
## Exercice 12
Remplacer tous les caractères accentués par caractères non accentués.
=> Accents.java
## Exercice 13
Chiffre de César: Chiffre de César:
Le texte chiffré s'obtient en remplaçant chaque lettre du texte clair original par une lettre à distance fixe, toujours du même côté, dans l'ordre de l'alphabet. Pour les dernières lettres (dans le cas d'un décalage à droite), on reprend au début. Par exemple avec un décalage de 3 vers la droite, A est remplacé par D, B devient E, et ainsi jusqu'à W qui devient Z, puis X devient A etc. Le texte chiffré s'obtient en remplaçant chaque lettre du texte clair original par une lettre à distance fixe, toujours du même côté, dans l'ordre de l'alphabet. Pour les dernières lettres (dans le cas d'un décalage à droite), on reprend au début. Par exemple avec un décalage de 3 vers la droite, A est remplacé par D, B devient E, et ainsi jusqu'à W qui devient Z, puis X devient A etc.
=> CesarChiffre.java CesarDechiffre.java
## Exercice 14
Tester si un mot est un palindrome. Un palindrome est un mot qui peut se lire dans les 2 sens: été, ici, colloc
## Exercice 15
Vérification ISBN à 13 caractères:
Retirer les tirets, ajouter tous les chiffres en multipliant successivement par 1 puis 3. Le résultat doit être un multiple de 10.
Exemple:
978-2-3793-1012-6
9x1 + 7x3 + 8x1 + 2x3 + 3x1 + 7x3 + 9x1 + 3x3 + 1x1 + 0x3 + 1x1 + 2x3 + 6x1 = 100
=> Isbn.java
# Idées # Idées
* Chiffrement de César * Chiffrement de César
* Chiffrement de Vigenere
* Factoriel
* Nombre d'occurrences d'un mot dans un texte
* Somme des entiers entre 2 entiers donnés * Somme des entiers entre 2 entiers donnés
* FizzBuzz * FizzBuzz
* mot palindrome
* cle IBAN
* Chiffrement de Vigenere
* Factoriel
* Nombre d'occurrences d'un mot dans un texte

43
ExercicesJava.md Normal file
View File

@ -0,0 +1,43 @@
# Exercices java
## Bases classe/objet
### Bonjour
* Créer un programme java qui affiche "Bonjour", appeler la classe principale `Application`.
### Classe et objet
* Créer une classe `Personne` vide. Créer un objet de cette classe dans la classe `Application`.
### Constructeur
* Ajouter un constructeur à la classe `Personne`, et lui faire afficher "Constructeur!".
### Constructeurs multiples
* Ajouter un autre constructeur à la classe `Personne`, prenant en paramètre une chaine de caractères `nom`.
* Faire afficher le paramètre `nom` par le constructeur.
* Modifier la classe `Application` pour utiliser ce constructeur.
### Variable d'instance
* Ajouter à la classe `Personne` une variable d'instance `nom`.
* Dans le second constructeur, valoriser la variable d'instance avec le paramètre, et supprimer l'affichage.
### Méthodes
* Ajouter à la classe `Personne` une méthode `ecrireNom`, qui affiche `Mon nom est ` puis la valeur de la variable d'instance `nom`.
* Appeler cette méthode depuis `Application`.
### Getters/setters
* Ajouter à la classe `Personne` les getter/setter pour l'attribut `nom`.
* Modifier la classe `Application` pour changer le nom, avant l'appel à `ecrireNom`.
### Composition
* Créer une classe `Cerveau`.
* Ajouter un constructeur à cette classe qui affiche "Réflexion...".
* Ajouter un attribut `cerveau` de type `Cerveau` à la classe `Personne`.
* Initialiser cet attribut dans le constructeur avec `nom`.

37
Fibonacci.java Normal file
View File

@ -0,0 +1,37 @@
import static utils.Utils.*;
public class Fibonacci {
public static final void main(String[] args) {
afficher("Fibonacci");
/*
int valeurPrecedente=0;
int valeur = 1;
afficher(valeurPrecedente);
while (valeur<=100){
afficher(valeur);
int nouvelleValeur = valeur+valeurPrecedente;
valeurPrecedente=valeur;
valeur=nouvelleValeur;
}
*/
afficher(0);
calculer(0, 1);
}
public static final void calculer(int valeurPrecedente,int valeur){
if (valeur<=100){
afficher(valeur);
int nouvelleValeur=valeur+valeurPrecedente;
calculer(valeur,nouvelleValeur);
}
}
}

25
FizzBuzz.java Normal file
View File

@ -0,0 +1,25 @@
import static utils.Utils.*;
public class FizzBuzz {
public static final void main(String[] args) {
for (int a=1; a<=199; a++){
if (a%3==0){
if (a%5==0) {
afficher("FizzBuzz");
} else {
afficher("Fizz");
}
} else{
if (a%5==0){
afficher("Buzz");
} else{
afficher(a);
}
}
}
}
}

24
Iban.java Normal file
View File

@ -0,0 +1,24 @@
import static utils.Utils.*;
public class Iban {
public static final void main(String[] args) {
String[] inputs = new String[] {
"FR7640618802770004064892182",
"FR7610807004896241909471914",
};
for (String input : inputs) {
char[] inputChar = input.toCharArray();
if (verifIban(inputChar)) {
afficher("IBAN correct: ", input);
} else {
afficher("IBAN incorrect: ", input);
}
}
}
public static boolean verifIban(char[] iban) {
return false;
}
}

12
Isbn.java Normal file
View File

@ -0,0 +1,12 @@
import static utils.Utils.*;
public class Isbn {
public static final void main(String[] args) {
afficher("ISBN");
// exemple: 978-2-3793-1012-6
}
}

13
Palindrome.java Normal file
View File

@ -0,0 +1,13 @@
import static utils.Utils.*;
public class Palindrome {
public static final void main(String[] args) {
testPalindrome(Palindrome::estPalindrome);
}
private static final boolean estPalindrome(char[] mot) {
return false;
}
}

15
Romain.java Normal file
View File

@ -0,0 +1,15 @@
import static utils.Utils.*;
public class Romain {
public static final void main(String[] args) {
afficher("Conversion nombre romains (I à X)");
testRomains(Romain::convertirEnDecimal);
}
public static int convertirEnDecimal(char[] romain) {
return 0;
}
}

28
Somme2.java Normal file
View File

@ -0,0 +1,28 @@
import static utils.Utils.*;
public class Somme2 {
public static final void main(String[] args) {
afficher("Somme 2");
testSomme2(Somme2::somme2);
}
public static final int somme2(int n, int p) {
if (n<=p){
int r=0;
for (int q=n; q<=p; q++){
r=r+q;
}
return r;
}
else {
return somme2(p,n);
}
}
}

View File

@ -1,12 +1,28 @@
package utils; package utils;
import java.util.Map;
import java.util.List;
import java.util.Arrays; import java.util.Arrays;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.Scanner; import java.util.Scanner;
import java.util.function.Function;
import java.util.function.BiFunction; import java.util.function.BiFunction;
public class Utils { public class Utils {
public static Map<String, Integer> ROMAINS = Map.of(
"I", 1,
"II", 2,
"III", 3,
"IV", 4,
"V", 5,
"VI", 6,
"VII", 7,
"VIII", 8,
"IX", 9,
"X", 10
);
public static final char[] ALPHABET = new char[] { public static final char[] ALPHABET = new char[] {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
@ -26,6 +42,24 @@ public class Utils {
"yxda zdn wxdb anbbnwcrxwb un kxwqnda m ncan carbcn" "yxda zdn wxdb anbbnwcrxwb un kxwqnda m ncan carbcn"
}; };
public static int[] TEST_SOMME2 = new int[] {
0, 3, 6,
3, 7, 25,
7, 3, 25,
};
public static void testSomme2(BiFunction<Integer, Integer, Integer> func) {
for (int i=0; i<TEST_SOMME2.length; i+=3) {
int n=TEST_SOMME2[i];
int p=TEST_SOMME2[i+1];
int s=TEST_SOMME2[i+2];
afficher("n = ", n, "p = ", p);
afficher("*** SOMME: ", func.apply(n, p));
afficher(" Attendu: ", s);
}
}
public static final void afficher(Object... args) { public static final void afficher(Object... args) {
if (args == null) { if (args == null) {
System.out.println("null"); System.out.println("null");
@ -35,7 +69,6 @@ public class Utils {
.collect(Collectors.joining(" ")); .collect(Collectors.joining(" "));
System.out.println(str); System.out.println(str);
} }
System.out.print(' ');
} }
public static final void afficherTabInt(int... args) { public static final void afficherTabInt(int... args) {
if (args == null) { if (args == null) {
@ -47,7 +80,6 @@ public class Utils {
.collect(Collectors.joining(" ")); .collect(Collectors.joining(" "));
System.out.println(str); System.out.println(str);
} }
System.out.print(' ');
} }
public static int lireEntier() { public static int lireEntier() {
@ -95,4 +127,31 @@ public class Utils {
} }
} }
public static void testPalindrome(Function<char[], Boolean> func) {
testPalindrome(func, "palindrome", false);
for (String pal : List.of("elle", "kayak", "serres", "essayasse")) {
testPalindrome(func, pal, true);
}
}
public static void testPalindrome(Function<char[], Boolean> func,
String mot, boolean result) {
boolean val = func.apply(mot.toCharArray());
afficher(mot, result == val ? "OK" : "ERREUR");
}
public static void testRomains(Function<char[], Integer> func) {
for (Map.Entry<String, Integer> entry : ROMAINS.entrySet()) {
String rom = entry.getKey();
int val = entry.getValue();
int res = func.apply(rom.toCharArray());
afficher(rom, " -> ", res);
if (res == val) {
afficher("Succés");
} else {
afficher("Attendu:", val);
}
}
}
} }