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

طلب مساعدة فى كود بلغة سى

بدأه اسهاء في 13 نوفمبر 2009 · 4 رد · 516 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم و رحمة الله و بركاته

لقد قمت بكتابة هذا الكود بهدف القيام بتخزين معلومات فى بنية القوائم

ولكن المشكل الذى واجهى عند برمجة دالة اخرى تقوم بعرض محتوى كل البيانات الوجود فى القائمة التى انشئتها لم يظهر لى الا محتوى العنصر الاول والاخير من القائمة

#include<stdio.h>
 #include<stdlib.h>
 typedef struct liste
 {
 struct liste *suiv;
 int val;
 }elem;
 typedef elem *zone;
 zone *tete = NULL;
/*********************************************/
void init()
 {
 int a,i,z;
 zone n,p,q;
 n= (elem*) malloc (sizeof(elem));
 printf("num :");
 scanf("%d",&a);
 for(i=1;i<=a;i++)
 {
 printf("valeur :");
 scanf("%d",&z);
 if(tete == NULL)
 {
 tete = n;
 tete->val =z;
 tete->suiv =NULL;
 }
 else
 {
 p=tete;
 while(p->suiv != NULL)
 p = p->suiv;
 p->suiv =q;
 q->val = z;
 q->suiv = NULL;
 }
 }
 }

ارجو ان تخبرونى اين هو الخطأ فى دالة اضافة العناصر بالنسبة للقوائم

و جزاكم الله خيرا

#2

حقيقتاً الكود غير مفهوم لي بأنشاءك عدد من العتاصر مثل t p ... في بنائك للبرامج يجب ان توضح عمل هذه المتغيرات و اختيار الاسم المناسب .

#3
Ali Al-Zyoud كتب:
حقيقتاً الكود غير مفهوم لي بأنشاءك عدد من العتاصر مثل t p ... في بنائك للبرامج يجب ان توضح عمل هذه المتغيرات و اختيار الاسم المناسب .

السلام عليكم و رحمة الله و بركاته

بالنسبة لدور المتغيرات فى كالاتى

كل خلية فى القائمة تحتوى على عنصر الاول هو مؤشر للبنية الموالية

(suiv)

و العنصر الثانى قيمة متغير

(val)

فى الدالة

init

طليث من المستخدم ان يدخل عدد البنيات الموجود فى القائمة

(num)

ولانشاء كل البنيات قمت بانشاء حلقة التكرار

for

لكل بنية يدخل المستخدم قيمة المتغير الخاص بها

(valeur)

ثم ياتى اضافة المتغير فى القائمة حسب وضع راس القائمة

tete

------------------

ارجو ان اكون قد استطعت التوضيح

اين هو الخطأ فى اظافة المتغيرات فى القائمة حيث اذا ادخلت 3 بنيات

لا تظهر لى الا قيمة المتغير الاول والثالث

#4

جرب هذا

#include<stdio.h>
#include<stdlib.h>
typedef struct liste
{
struct liste *suiv;
int val;
}elem;
typedef elem *zone;
zone tete = NULL;
/*********************************************/
void init()
{
int a,i,z;
zone n,p,q;
n= (elem*) malloc (sizeof(elem));
printf("num :");
scanf("%d",&a);
for(i=1;i<=a;i++)
{
printf("valeur :");
scanf("%d",&z);
if(tete == NULL)
{
tete = n;
tete->val =z;
tete->suiv =NULL;
}
else
{
p=tete;
while(p->suiv != NULL)
p = p->suiv;
q= (elem*) malloc (sizeof(elem));
q->val = z;
q->suiv = NULL;
p->suiv =q;
}
}

}
int main(int argc, char* argv[])
{
	zone p;
	init();
	p=tete;
	while(p)
	{	
		printf("%d\n",p->val);
		p=p->suiv;
	}
	return 0;
}

كما قال الأخ Ali Al-Zyoud إستخدم معرفات ذات معنى ....

#5
YaSeenTA كتب:
جرب هذا

#include<stdio.h>
 #include<stdlib.h>
 typedef struct liste
 {
 struct liste *suiv;
 int val;
 }elem;
 typedef elem *zone;
 zone tete = NULL;
 /*********************************************/
 void init()
 {
 int a,i,z;
 zone n,p,q;
 n= (elem*) malloc (sizeof(elem));
 printf("num :");
 scanf("%d",&a);
 for(i=1;i<=a;i++)
 {
 printf("valeur :");
 scanf("%d",&z);
 if(tete == NULL)
 {
 tete = n;
 tete->val =z;
 tete->suiv =NULL;
 }
 else
 {
 p=tete;
 while(p->suiv != NULL)
 p = p->suiv;
 q= (elem*) malloc (sizeof(elem));
 q->val = z;
 q->suiv = NULL;
 p->suiv =q;
 }
 }

 }
 int main(int argc, char* argv[])
 {
	 zone p;
	 init();
	 p=tete;
	 while(p)
	 {	
		 printf("%d\n",p->val);
		 p=p->suiv;
	 }
	 return 0;
 }

كما قال الأخ Ali Al-Zyoud إستخدم معرفات ذات معنى ....

شكرا لك على المساعدة

لقد نجح اﻻمر معى

جزاك الله خيرا

اسهاء :عضوة

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