\documentclass{article}
\usepackage{amssymb, amsmath, geometry, multicol, cancel, empheq}
\usepackage[table, svgnames, dvipsnames]{xcolor}
\usepackage{makecell, cellspace, caption}
\usepackage[europeanresistors]{circuitikz}
\usepackage[a]{esvect} % voir la doc pour les différents styles
\usepackage{tikz-3dplot}
\usepackage{listings}
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codeblue}{rgb}{0,0,0.8}
\definecolor{codeorange}{rgb}{0.8,0.4,0}
\definecolor{backcolour}{rgb}{1,1,1}

\let\overrightarrow\vv

\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codegreen},
    keywordstyle=\color{codeblue},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codeorange},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2
}

\lstset{style=mystyle}

\usetikzlibrary{arrows}
\usetikzlibrary{shapes.geometric}

\newcommand{\parspace}{\vspace{0.1cm}}
\linespread{1.25}
\geometry{tmargin=.7in, bmargin=.75in, lmargin=.75in, rmargin = .75in}

\begin{document}
\setlength{\parindent}{0mm}

\title{Algorithmique et Structures de Données - Variables}
\author{Aubin SIONVILLE}
\date{Télécom St Etienne 2023-2024}

\maketitle

\center

\section*{Définition}

\[\boxed{\textbf{Variable} : \text{espace mémoire nommé}}\]

\section*{Les différentes sortes de variables}


\[\boxed{\textbf{Variable locale} : \text{accessible uniquement dans le bloc dans lequel elle est déclarée}}\]

\[\boxed{\begin{array}{ll}
        \textbf{Variable statique} : &\text{accessible uniquement dans le bloc dans lequel elle est déclarée},\\
        &\text{mais sa valeur est conservée entre chaque appel du bloc}
\end{array}}\]

\[\boxed{\textbf{Variable globale} : \text{accessible dans tout le fichier}}\]

\[\boxed{\textbf{Variable externe} : \text{provient d'un autre fichier}}\]

\[\boxed{\textbf{Variable constante} : \text{sa valeur ne peut pas être modifiée}}\]


\newpage

\section*{Exemple}

\begin{lstlisting}[language=c++]

#include <iostream>
using namespace std;

const int g = 9.81; // constante (immuable)

extern int c // provient d'un autre fichier

int e = 0; // variable globale

void fonction()
{
    int a = 1; // variable locale, inaccessible en dehors de la fonction

    static int b = 0; // variable statique
    b++; // la valeur de b augmente de 1 a chaque appel de la fonction
    cout << b << endl;
}

int main()
{
    for (int i = 0; i < 5; i++)
    {
        fonction(); // affiche 1, 2, 3, 4, 5
    }
    cout << a << endl; // erreur : a n'est pas accessible en dehors de la fonction

    cout << g << endl; // 9.81

    g = 10; // erreur : g est une constante

    cout << c << endl; // valeur de c provenant d'un autre fichier

    cout << e << endl; // 0

    e = 5; // e vaut maintenant 5 (la valeur de e est modifiee dans les deux fichiers)
    return 0;
}
\end{lstlisting}

\end{document}