تخطَّ إلى المحتوى الرئيسي
Wadifa Infoالوظيفة العمومية بالمغرب FR
🎁 كون من الأوائل: جرّب تقدية قبل ما تخرج، مجاناً جرّب ←

نموذج مباراة ولوج السنة الأولى من سلك مهندسي الدولة - المعهد الوطني للبريد والمواصلات (INPT) 2012 - اختبار الخوارزميات والبرمجة بلغة C

🏢 المعهد الوطني للبريد والمواصلات INPT 👤 طالب مهندس 🎯 الخوارزميات والبرمجة بلغة C 📅 16/07/2012 👁️ 16 مشاهدة

⬇️ تحميل PDF الرابط الدائم: wadifa-info.com/نموذج-مباراة/2630

باختصار

هذا نموذج امتحان كتابي سابق لمباراة طالب مهندس لدى المعهد الوطني للبريد والمواصلات INPT (16/07/2012)، منشور على وظيفة إنفو للاطلاع والتحميل المجاني بصيغة PDF مع تصحيح مقترح.

الجهة المنظمة
المعهد الوطني للبريد والمواصلات INPT
الدرجة
طالب مهندس
التخصص
الخوارزميات والبرمجة بلغة C
الدورة
16/07/2012
عدد الصفحات
4
لغة الأسئلة
الفرنسية
التصحيح
تصحيح مقترح متوفر في هذه الصفحة
اختبار الخوارزميات والبرمجة بلغة C لمباراة ولوج السنة الأولى من سلك مهندسي الدولة بالمعهد الوطني للبريد والمواصلات (الاثنين 16 يوليوز 2012، ساعة واحدة): مسألة حول التحقق من صلاحية المعرفات في لغة البرمجة.
نموذج مباراة جديد كل يوم على قناة واتساب
هل أفادك؟ شاركه مع من يبحث
WhatsApp Facebook Telegram
تابع تحضيرك: 📄 نموذج مباراة ولوج السنة الثانية من سلك… 📄 نموذج مباراة ولوج السنة الثانية من سلك… 📄 نموذج مباراة ولوج السنة الأولى من سلك …
📝 نص أسئلة النموذج (مستخرج آلياً من الصفحات الممسوحة)

استُخرج هذا النص آلياً من صور الامتحان وقد يحتوي على أخطاء في القراءة — الصور أعلاه هي المرجع.

Royaume du Maroc .
Agence Nationale de Réglementation des Télécommunications
Institut National des Postes et Télécommunications
Concours d’accès en 1“ année de l’Institut
National des Postes et Télécommunications
Lundi 16 juillet 2012
Epreuve d’algorithmique et programmation
en Langage C
Recommandations aux candidats
| - L’appréciation des copies tient compte de la rigueur algorithmique, de
la présentation et de la clarté de la rédaction.
- Si, au cours de l'épreuve, un candidat repère ce qui lui semble être une
erreur d'énoncé, il le signale sur sa copie, propose une correction et
poursuit l'épreuve en conséquence.
- L'usage de calculatrices électroniques n'est pas autorisé.
Durée de l’épreuve: 1 heure
wadifa-info.com ‏نماذج المباريات من موقع وظيفة إنفو‎

| Problème: Validité des identificateurs d’un langage de programmation
Contexte du problème
Tout langage de programmation permet l’utilisation de chaînes de caractères
pour déclarer et identifier les constantes et les variables du programme.
Ces chaînes de caractères appelés identificateurs doivent respecter un
ensemble de règles particulières pour chaque langage.
Le problème suivant s'intéresse à la vérification de la validité d'identificateurs
d'un langage spécifique
Règles de validité des identificateurs du langage à étudier
Soit un langage de programmation qui définit, comme suit, les règles de validité
d'un identificateur:
- Un identificateur est une chaîne de caractères de longueur inférieure strictement à 80
- Un identificateur ne peut contenir que des caractères alphabétiques minuscules
(‘a’, …,’z') ou majuscules (‘A’, …,’Z’) ou des chiffres (‘0’, ‘1’, ... ‘9?).
- Un identificateur ne doit pas commencer par un chiffre (‘0’, 1”, …, ‘9?).
- Un identificateur ne doit pas être un des mots clés suivants : if, do, while , for.
Remarques
- Toutes les fonctions demandées seront écrites en langage C
- Les questions non traitées peuvent être admises pour aborder les questions
ultérieures
- Toute fonction peut être décomposée, si nécessaire, en plusieurs fonctions
- Seules les fonctions suivantes définies dans la bibliothèque du langage © peuvent être
appelées sans être définies :
- Fonctions déclarées dans le fichier string.h
int strlen (const char“) retourne la longueur de la chaine en paramètre
char* strepy (char*, const char*) : copie la 2ème chaîne dans la première
int stremp (const char*, const char*) compare les 2 chaînes en paramètres et
retourne 0 si elles sont identiques
- Fonction déclarée dans le fichier stdlib.h
void free (void*) : libère l’espace dynamique alloué |
- Dans ce problème, il n’est pas demandé d'écrire la fonction main
Rappel : Les valeurs décimales des codes ASCII des caractères chiffres, des
caractères alphabétiques majuscules ou miniscules sont indiqués ci-dessous :
Code ASCII] 48 | 49 | [57] [65 ]66| |90 | |97]98 | |122
‏ا ا ا‎

1- Vérification de la validité d’un identificateur
> Question 1 (5 points) : Ecrire une fonction de prototype int valide (char id! ]) qui
retourne 1 si son paramètre id est un identificateur valide ou retourne 0 (zéro) sinon.
(Un identificateur est valide s’il respecte les règles du langage à étudier citées plus haut)
Exemple :
Concours, INPT, Max10, Min0 sont des identificateurs valides.
3xy, hy*, if ne sont pas des identificateurs valides.
2- Suppression des identificateurs non valides dans un tableau
> Question 2 (8 points): Soit T un tableau de N (0<N) chaînes de caractères dont
les longueurs sont inférieures à 80
Ecrire une fonction de prototype : void supprimer(int N, char 1] ][80]) qui
supprime toutes les chaînes qui ne correspondent pas à des identificateurs valides. Ces
chaînes seront remplacées par des chaînes vides à la fin du tableau ( voir exemple)
Exemple
- Soit N= 5 et 1-) 10601117, “4val”, “variable”, “if”, “delta”}
Après l'appel de la fonction supprimer(5, T),T={'identifi”, “variable”, "6117, 7, 1
3- Suppression des identificateurs redondants dans une liste chaînée |
On suppose avoir déjà crée une liste chaînée d’identificateurs valides dans la :
mémoire dynamique. Cette liste chaînée est définie par le type liste déclaré ainsi :
typedef struct tliste
{ char identificateur[80]; // représente un identificateur
struct tliste “suiv; // représente l'adresse de l'élément suivant dans la liste
} liste;
> Question 3 (7 points): Ecrire une fonction de prototype :
void supprimer_redondants(liste *adrDebut) qui permet de supprimer tous les
identificateurs redondants dans une liste chaînée de type liste définie plus haut.
Le paramètre (adrDebut) de cette fonction représente l'adresse du premier
élément de cette liste, le dernier élément de cette liste a l'adresse NULL dans son
champ suiv
Dans le cas où n (n>1) identificateurs sont identiques dans la liste chaînée, on
ne laissera dans la liste que le premier et on supprimera les (n-1) autres (voir exemple)

| Exemple
-Représentation de la Liste chaînée avant la suppression des identificateurs redondants :
adrDebut
‎el ai‏ نايبب
‎-Représentation de la liste chaînée après l'appel de la fonction supprimer _redondants(adrDebut)
‎adrDebut
‎SARA ERINE ERA ‏ا ين‎ RENE FIN DE L’'EPREUVE KENEEAARARAAENEERERIERERANENEENERERXT
‎313
‏نماذج المباريات من موقع وظيفة إنفو ‎wadifa-info.com‏

التصحيح المقترح

هذا تصحيح مقترح من إعداد فريق wadifa-info لمساعدتك على فهم منهجية الإجابة — وليس تصحيحاً رسمياً صادراً عن الإدارة المنظِّمة. أسئلة هذا الامتحان محررة بالفرنسية، لذلك التصحيح محرر بالفرنسية أيضاً.

Ce modèle est l'épreuve d'algorithmique et programmation en langage C du concours d'accès en 1re année de l'INPT (Institut National des Postes et Télécommunications, ANRT), session du lundi 16 juillet 2012. Durée : 1 heure, calculatrice interdite. Un seul problème en trois questions (5 + 8 + 7 points) sur la validité des identificateurs d'un langage. Voici une correction proposée ; seules strlen, strcpy, strcmp et free sont utilisées, comme l'impose l'énoncé.

💡 Le jury note la rigueur : traitez les cas limites (chaîne vide, longueur 79/80, premier ou dernier élément de la liste) et libérez la mémoire des maillons supprimés.

Question 1 — Fonction valide (5 points)

On vérifie les quatre règles dans l'ordre : longueur entre 1 et 79 (strictement inférieure à 80 ; une chaîne vide n'identifie rien), premier caractère non chiffre, uniquement des lettres ou des chiffres, et pas un mot clé. Deux petites fonctions auxiliaires testent la nature d'un caractère à partir des codes ASCII rappelés (les lettres et les chiffres sont contigus dans la table).

int estLettre(char c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); }
int estChiffre(char c) { return c >= '0' && c <= '9'; }

int valide(char id[])
{
    int i, n = strlen(id);
    if (n == 0 || n >= 80) return 0;          /* longueur dans [1, 79] */
    if (estChiffre(id[0])) return 0;          /* ne commence pas par un chiffre */
    for (i = 0; i < n; i++)
        if (!estLettre(id[i]) && !estChiffre(id[i])) return 0;
    if (strcmp(id, "if") == 0 || strcmp(id, "do") == 0 ||
        strcmp(id, "while") == 0 || strcmp(id, "for") == 0) return 0;
    return 1;
}

Contrôle sur l'exemple : Concours, INPT, Max10, Min0 → 1 ; 3xy (commence par un chiffre), hy* (caractère *), if (mot clé) → 0.

Question 2 — Fonction supprimer (8 points)

On compacte le tableau en un seul passage : l'indice k désigne la prochaine case à remplir. Chaque chaîne valide est recopiée en position k (l'ordre est conservé), puis les cases restantes reçoivent la chaîne vide (premier caractère '\0'). Complexité : N appels à valide.

void supprimer(int N, char T[][80])
{
    int i, k = 0;                      /* k : prochaine place libre */
    for (i = 0; i < N; i++)
        if (valide(T[i])) {
            if (k != i) strcpy(T[k], T[i]);
            k++;
        }
    for (; k < N; k++) T[k][0] = '\0'; /* chaines vides en fin de tableau */
}

Contrôle : {"identif1", "4val", "variable", "if", "delta"} devient {"identif1", "variable", "delta", "", ""}.

Question 3 — Fonction supprimer_redondants (7 points)

Pour chaque maillon p, on parcourt la suite de la liste avec deux pointeurs (prec, q) ; chaque maillon q portant le même identificateur que p est détaché (prec->suiv = q->suiv) puis libéré par free. Le premier exemplaire est toujours conservé, si bien que la tête de liste ne change jamais : le paramètre adrDebut (adresse du premier élément) suffit. Complexité O(n²) comparaisons.

void supprimer_redondants(liste *adrDebut)
{
    liste *p, *prec, *q;
    for (p = adrDebut; p != NULL; p = p->suiv) {
        prec = p;                      /* on parcourt la suite de la liste */
        q = p->suiv;
        while (q != NULL) {
            if (strcmp(q->identificateur, p->identificateur) == 0) {
                prec->suiv = q->suiv;  /* on detache q */
                free(q);
                q = prec->suiv;
            } else {
                prec = q;
                q = q->suiv;
            }
        }
    }
}

Contrôle : Valeur → nombre → nombre → total → Valeur → X10 → total devient Valeur → nombre → total → X10 → NULL.

أسئلة شائعة حول هذا النموذج

هل يمكن تحميل هذا النموذج مجاناً؟
نعم. صفحات هذا النموذج (4) متاحة للاطلاع والتحميل مجاناً، وبدون تسجيل أو إنشاء حساب.
هل يتضمن هذا النموذج التصحيح؟
نعم. تجد في هذه الصفحة، أسفل صفحات الأسئلة، تصحيحاً مقترحاً يشرح منهجية الإجابة والعناصر المنتظرة، من إعداد فريق وظيفة إنفو.
ما هي الجهة المنظمة والدرجة المعنية بهذا النموذج؟
هذا النموذج من مباراة نظمتها المعهد الوطني للبريد والمواصلات INPT. ويخصّ درجة: طالب مهندس.
ما هي دورة هذا الامتحان ولغة أسئلته؟
الدورة: 16/07/2012. والأسئلة باللغة الفرنسية.
أين أجد نماذج أخرى لنفس المباراة؟
جمعنا نماذج نفس العائلة في صفحة نماذج مباريات ولوج المدارس والمعاهد العليا، مرتّبة حسب الدورة من الأحدث إلى الأقدم.

ناقش هذا النموذج (0)

شارك إجاباتك أو صحّح التصحيح — إذا كان لديك رأي مختلف حول أي نقطة، اكتبه هنا ليستفيد باقي المترشحين.

لا يوجد نقاش بعد — شارك إجابتك أو سؤالك حول هذا النموذج.

⚠️ ممنوع نشر أرقام الهاتف أو الروابط أو أي عرض مقابل مال — تُحذف هذه المشاركات تلقائياً.

الجهة المنظمة: المعهد الوطني للبريد والمواصلات INPT · 16/07/2012 — مصدر النسخة: وثائق منشورة للعموم (alloschool / Scribd)؛ الإعلان الرسمي للمباراة هو المرجع.

كيف تستشهد بهذه الصفحة؟

صحفي أو مدوّن أو أستاذ؟ انسخ المرجع أسفله وضع رابطاً نحو هذه الصفحة.

الرابط الدائم: https://www.wadifa-info.com/نموذج-مباراة/2630/نموذج-مباراة-ولوج-السنة-الأولى-من-سلك-مهندسي-الدولة-المعهد-الوطني-للبريد-والمو

📲
ثبّت تطبيق وظيفة إنفو على جهازك: اضغط زر المشاركة في أسفل سفاري، ثم اختر إضافة إلى الشاشة الرئيسية. تصلك المباريات الجديدة بسرعة ودون متصفح.