Compare commits

..

1 Commits

Author SHA1 Message Date
70190cbeb2 WIP: correction
utilise BigInteger, erreur sur 1er IBAN
2019-06-16 15:39:01 +02:00
13 changed files with 70 additions and 326 deletions

View File

@ -1,22 +0,0 @@
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));
}
}

View File

@ -1,38 +0,0 @@
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

@ -351,28 +351,3 @@ 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

@ -135,56 +135,21 @@ Exemple:
## Exercice 9 ## 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 => CesarChiffre.java CesarDechiffre.java
## Exercice 14 ## Exercice 10
Tester si un mot est un palindrome. Un palindrome est un mot qui peut se lire dans les 2 sens: été, ici, colloc Verification IBAN:
## Exercice 15 1. Enlever les caractères indésirables (espaces, tirets),
2. Supprimer les 4 premiers caractères et les replacer à la fin du compte,
Vérification ISBN à 13 caractères: 3. Remplacer les lettres par des chiffres au moyen d'une table de conversion (A=10, B=11, C=12 etc.),
4. Diviser le nombre ainsi obtenu par 97,
Retirer les tirets, ajouter tous les chiffres en multipliant successivement par 1 puis 3. Le résultat doit être un multiple de 10. 5. Si le reste n'est pas égal à 1 l'IBAN est incorrect : Modulo de 97 égal à 1.
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
@ -192,7 +157,6 @@ Exemple:
* Somme des entiers entre 2 entiers donnés * Somme des entiers entre 2 entiers donnés
* FizzBuzz * FizzBuzz
* mot palindrome
* cle IBAN * cle IBAN
* Chiffrement de Vigenere * Chiffrement de Vigenere
* Factoriel * Factoriel

View File

@ -1,43 +0,0 @@
# 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`.

View File

@ -1,37 +0,0 @@
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);
}
}
}

View File

@ -4,22 +4,6 @@ public class FizzBuzz {
public static final void main(String[] args) { 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);
}
}
}
} }
} }

View File

@ -1,4 +1,5 @@
import static utils.Utils.*; import static utils.Utils.*;
import java.math.BigInteger;
public class Iban { public class Iban {
@ -18,7 +19,56 @@ public class Iban {
} }
public static boolean verifIban(char[] iban) { public static boolean verifIban(char[] iban) {
return false; char[] etape1 = deplacer(iban);
int[] etape2 = remplacerLettres(etape1);
BigInteger num = convertir(etape2);
BigInteger rem = num.remainder(BigInteger.valueOf(97));
return rem.equals(BigInteger.ONE);
}
public static char[] deplacer(char[] in) {
char[] out = new char[in.length];
for (int i=0;i<4;i++) {
out[out.length-4+i]=in[i];
}
for (int i=4; i<in.length;i++) {
out[i-4] = in[i];
}
return out;
}
public static int[] remplacerLettres(char[] in) {
int[] out = new int[in.length];
for (int i=0;i<in.length;i++) {
// '0' => 48, '1' => 49, ...
// 'A' => 65, 'B' => 66
char c = in[i];
int cAsInt = c;
int cc;
if (cAsInt > 64) {
cc = cAsInt - 55;
} else {
cc = cAsInt - 48;
}
out[i] = cc;
}
return out;
}
public static BigInteger convertir(int[] in) {
BigInteger sum = BigInteger.valueOf(0);
long mult = 1;
for (int i=0;i<in.length;i++) {
int val = in[i];
sum = sum.add(BigInteger.valueOf(in[i] * mult));
if (val < 10) {
mult *= 10;
} else {
mult *= 100;
}
}
return sum;
} }
} }

View File

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

View File

@ -1,13 +0,0 @@
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;
}
}

View File

@ -1,15 +0,0 @@
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;
}
}

View File

@ -9,20 +9,7 @@ public class Somme2 {
} }
public static final int somme2(int n, int p) { public static final int somme2(int n, int p) {
return 0;
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,28 +1,12 @@
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'
@ -60,15 +44,21 @@ public class Utils {
} }
} }
public static final void afficher(char[] args) {
System.out.println(new String(args));
}
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");
} else { } else {
String str = Arrays.stream(args) String str = Arrays.stream(args)
.map(String::valueOf) .map(String::valueOf)
.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) {
@ -80,6 +70,7 @@ 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() {
@ -127,31 +118,4 @@ 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);
}
}
}
} }