الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اختبر قدراتك في C/CPP - الحلقة الخامسة, الجزء الرابع

مغلق
بدأه Snack3r في 23 سبتمبر 2012 · 4 رد · 1,430 مشاهدة · في اختبر قداراتك
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

الحلقة الأولى.

الحلقة الثانية - الجزء الأول.

الحلقة الثانية - الجزء الثاني.

الحلقة الثانية - الجزء الثالث.

الحلقة الثانية - الجزء الرابع.

الحلقة الثانية - الجزء الخامس.

الحلقة الثانية - الجزء السادس و الأخير.

الحلقة الثالثة - الجزء الأول.

الحلقة الثالثة - الجزء الثاني.

الحلقة الثالثة - الجزء الثالث.

الحلقة الثالثة - الجزء الرابع.

الحلقة الثالثة - الجزء الخامس و الأخير.

الحلقة الرابعة - الجزء الأول.

الحلقة الرابعة - الجزء الثاني.

الحلقة الرابعة - الجزء الثالث.

الحلقة الرابعة - الجزء الرابع.

الحلقة الرابعة - الجزء الخامس.

الحلقة الرابعة - الجزء السادس.

الحلقة الرابعة - الجزء السابع.

الحلقة الرابعة - الجزء الثامن.

الحلقة الرابعة - الجزء التاسع.

الحلقة الرابعة - الجزء العاشر.

الحلقة الرابعة - الجزء الحادي عشر.

الحلقة الرابعة - الجزء الثاني عشر.

الحلقة الرابعة - الجزء الثالث عشر.

الحلقة الرابعة - الجزء الرابع عشر.

الحلقة الرابعة - الجزء الخامس عشر.

الحلقة الرابعة - الجزء السادس عشر.

الحلقة الرابعة - الجزء السابع عشر.

الحلقة الرابعة - الجزء الثامن عشر.

الحلقة الرابعة - الجزء التاسع عشر.

الحلقة الرابعة - الجزء العشرون و الأخير.

الحلقة الخامسة - الجزء الأول.

الحلقة الخامسة - الجزء الثاني.

الحلقة الخامسة - الجزء الثالث.

مرحبا بكم إخوتي الكرام في الجزء الرابع من الحلقة الخامسة من سلسلة اختبر قدراتك, قمتُ بتقسيم الحلقة الخامسة إلى عدة أجزاء, مُرتبة حسب الصعوبة.

أجزاء هذه الحلقة ستكون خاصة بمتفرقات C/C++.

الإختبار الخامس (الجزء الرابع) :

نريد تسجيل أسماء و أعمار الموظفين, اكتب برنامج يقوم بإنشاء قائمة مترابطة تحتوي كل عقدة منها على اسم و عمر موظف معين.

يتم إدخال بيانات الموظفين من طرف المستخدم, ينتهي البرنامج من استقبال أو تخزين البيانات عندما يُدخل المستخدم إسم فارغ.

عند انتهاء الإدخال يقوم البرنامج بعرض بيانات الموظفين من الأسفل إلى الأعلى.

مثال :

post-219439-035124700 1348387069_thumb.p

سأضع حل السؤال بعد إنتهاء عرض المحاولات.

المرفقات
testCode.png
#2

السلام عليكم هذه محاولتي


#include <stdlib.h>
typedef struct Data{
char * name;
char *age;
struct Data * next;
}Data;

char * inStr();
void Push(Data **prec, char *name, char *age);
void View(Data *ptr);
void Clear(Data **ptr);

int main(int argc, char ** argv)
{
Data *data = NULL;
char * str = NULL;
char * age = NULL;
int size = 0;
while(1)
{
printf("Nom : \n");
str = inStr();
if(!(str == NULL))
{
printf("Age : \n");
age = inStr();
if(!(age == NULL))
{
Push(&data, str, age);
size++;
}
else{
break;
}
}
else{
break;
}
}
printf("\n\nNOM \t\t AGE\n");
View(data);
Clear(&data);
return 0;
}
void Push(Data **prec, char *name, char *age)
{
Data *element = malloc(sizeof(Data));
if(!element)
{
exit(EXIT_FAILURE);
}
element->name = name;
element->age = age;
element->next = *prec;
*prec = element;
}
void View(Data *ptr)
{
while(ptr)
{
printf("\n%s\t", ptr->name);
printf("%s\n", ptr->age);
ptr = ptr->next;
}
}
void Clear(Data **ptr)
{
Data *tmp;
while(*ptr)
{
tmp = (*ptr)->next;
free(*ptr);
*ptr = tmp;
}
}
char * inStr()
{
char c = 0;
int size = 1;
char *tmp = NULL, *inStr = NULL;
while((c = getchar()) != '\n')
{
size++;
tmp = (char *) realloc(inStr, sizeof(char) * size);
if(tmp != NULL)
{
inStr = tmp;
}
else{
free(inStr);
exit(0);
}
inStr[size - 2] = c;
}
if(!(inStr == NULL))
{
inStr[size - 1] = '\0';
}
return inStr;
}
#include <stdio.h>

#3

محاولتي :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LGNOM 20                     /* longueur maximale d'un nom */

typedef struct element               /* définition du type élément */ {
    char nom [LGNOM + 1];        /* nom */
    int age;                     /* age */
    struct element * suivant;    /* pointeur element suivant */
} t_element;

int main() {
    void creation(t_element * *);    /* fonction de création de la liste */
    void liste(t_element *);         /* fonction de liste de la liste */
    t_element * debut;               /* pointeur sur le début de la liste */

    creation(&debut);
    liste(debut);

    return 0;
}
                 /****************************************************/
                 /* fonction de création d'une liste chaînée */
                 /****************************************************/
void creation(t_element * * adeb) {
    char nomlu [LGNOM + 1];          /* pour lire un nom au clavier */
    t_element * courant;         /* pour l'échange de valeurs de pointeurs */
    * adeb = NULL;               /* liste vide au départ */
    while (1)                    /* boucle de création apparemment infinie ... */
        {                        /* ... mais, en fait, interrompue sur "nom vide" */
        printf("nom : ");
        gets(nomlu);
        if (strlen(nomlu)) {
            courant = (t_element *) malloc(sizeof (t_element));
            strcpy(courant->nom, nomlu);
            printf("age : ");
            scanf("%d", &courant->age);
            getchar();           /* pour sauter le \n */
            courant->suivant = *adeb;
            * adeb = courant;
        } else break;            /* sortie boucle si nom vide */
    }
}
                 /****************************************************/
                 /* fonction de liste d'une liste chaînée */
                 /****************************************************/
void liste(t_element * debut) {
    printf("\n\n NOM AGE\n\n");
    while (debut) {
        printf("%15s %3d\n", debut->nom, debut->age);
        debut = debut->suivant;
    }
}
#4

أخيرا نجحت في الحل ...

هذه تقريبا اول مرة اصمم فيها قائمة مترابطة ...

#include<iostream>
using namespace std;
class listComponent
{
private:
	char name[30];
	int age;
	listComponent*next;
	bool getname()
	{
		cout<<"name=";
		name[0]=0;
		cin.getline(name,29,10);
		if(name[0])return 1;
		else return 0;
	}
	void getage()
	{
		cout<<"age=";
		cin>>age;getchar();
	}
	void printComponents()
	{
		cout<<name<<'\t'<<age<<endl;
	}
public:
	listComponent()
	{
		if(getname())
		{
			getage();
			listComponent b;
			printComponents();
		}
	}
};
int main()
{
listComponent a;
return 0;
}

عانيت مشكلة في الدخل .. فبعد ادخل العمر يتم ادخال محرف الانتقال لسطر جديد ..وبالتالي يتوقف ادخال الاسم ... وحللت المشكلة بحل مؤقت ..

ولكن هل يمكن لأحد بوضع getchar بعد أخذ العمر من المستخدم ...

حاول ازالة getchar وسيحدث امر غريب لم اعرف سببه ...

وشكرا والسلام عليكم

هذا الموضوع مغلق.

مواضيع مشابهة