Outils pour utilisateurs

Outils du site


nsi:langages:rust:solutions:jour_semaine

Ceci est une ancienne révision du document !



Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 172

Warning: Undefined array key 1 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149

Warning: Trying to access array offset on value of type null in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 149

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Warning: Undefined array key 2 in /home/goupillf/wiki.goupill.fr/lib/plugins/codeprettify/syntax/code.php on line 214

Trouver le jour correspondant à une date

Je n'ai pas encore bien déterminer comment faire pour récupérer une date depuis une chaîne de caractères. Je fixe donc les valeurs dans le main.

const MOIS:[usize;12] = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const JOURS:[&str;7] = ["samedi", "dimanche", "lundi", "mardi", "mercredi", "jeudi", "vendredi"];
const AREF:usize = 2000; // année de référence

fn is_bissextile(annee: usize) -> bool {
    if annee % 1000 == 0 {
        true
    } else if annee % 100 == 0 {
        false
    } else if annee % 4 == 0 {
        true
    } else {
        false
    }
}

fn days_in_month(month: usize, annee:usize) -> usize {
    let n = MOIS[month - 1];
    if (month == 2) && is_bissextile(annee) {
        n + 1
    } else {
        n
    }
}

fn days_in_year(annee:usize) -> usize {
    if is_bissextile(annee) {
        366
    } else {
        365
    }
}

fn jours_finir_annee(jour: usize, mois: usize, annee:usize) -> usize {
    // renvoie le nombres de jours pour une certaines dates pour atteindre
    // le 1er janvier de l'année d'après

    let mut days:usize = days_in_month(mois, annee) - (jour-1);
    for m in (mois+1)..=12 {
        days += days_in_month(m, annee);
    }
    days
}

fn jours_depuis_debut(jour: usize, mois: usize, annee:usize) -> usize {
    // renvoie le nombres de jours pour atteindre une certaine date
    // depuis le 1e janvier de cette même année
    let mut days:usize = jour-1;
    for m in 1..mois {
        days += days_in_month(m, annee);
    }
    days
}

fn nombre_jours(jour: usize, mois: usize, annee:usize) -> usize {
    if annee >= AREF {
        let mut days = jours_depuis_debut(jour, mois, annee);
        for a in AREF..annee {
            days += days_in_year(a);
        }
        days % 7
    } else {
        let mut days = jours_finir_annee(jour, mois, annee);
        for a in (annee+1)..AREF {
            days += days_in_year(a);
        }
        7 - (days % 7)
    }
}

fn main() {
    let jour:usize = 18;
    let mois:usize = 03;
    let annee:usize = 1977;
    let delta = nombre_jours(jour, mois, annee);
    println!("{}", JOURS[delta]);
}
nsi/langages/rust/solutions/jour_semaine.1648837084.txt.gz · Dernière modification : de goupillwiki