ahmed.o.mohamed

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

5 ردود في هذا الموضوع

السلام عليكم

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

مثال :

post-219439-035124700 1348387069_thumb.p

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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


#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>

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

محاولتي :

#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;
}
}

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

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

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

#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 وسيحدث امر غريب لم اعرف سببه ...

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

تم منح النقاط للمشاركات المفيدة.

يُغلق.

أراكم في الجزء الخامس من الحلقة الخامسة.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .