السلام عليكم
ياشباب هذي والله اول مشاركة في المنتدى فالرجاء ماتردوني خايب
الزبده (( لورباك )) -- لا خفيف دم --
عموماً المطلوب هو عمل انشاء fileفيه عدة ارقام (طبعاً انشائه طبيعي عن طريق المفكرة) وبعدين تخلي البرنامج يقراء من الملف هذا ويخزنه في ملف جديد وتكون الأرقام مرتبه ترتيب تصاعدي او تنازلي مافيه مشكله المهم انها مرتبه
**
يا شباب هذا برنامج مقارب للمطلوب بس انه ما يرتب الأرقام وفيه بعض الأخطاء
(( الرجاء سرعة الرد لأن البرنامج مطلوب يوم الأحد القادم ))
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
FILE *indataA,*indataB,*fopen();
struct node
{
struct node *prev;
int data;
struct node *next;
};
struct node *get_node()
{
return((struct node *) malloc (sizeof(struct node)));
}
get_data(x,indata)
int *x;
FILE *indata;
{
fscanf(indata,"%d",x);
}
llist_create(list,last_elem_num,last_elem_ptr,cur_elem_num,cur_elem_ptr,list_size)
struct node **list,**last_elem_ptr,**cur_elem_ptr;
int *last_elem_num,*cur_elem_num,*list_size;
{
struct node * get_node ();
*list=get_node();
(*list)->next=NULL;
(*list)->prev=NULL;
(*list)->data=0;
*cur_elem_num=0;
*cur_elem_ptr=NULL;
*last_elem_num=0;
*last_elem_ptr=NULL;
*list_size=0;
}
llist_is_empety(list_size)
int list_size;
{
if (list_size==0)
return (TRUE);
else
return (FALSE);
}
llist_first(list,cur_elem_num,cur_elem_ptr,list_size)
struct node *list,**cur_elem_ptr;
int *cur_elem_num,list_size;
{
if (!llist_is_empty(list_size))
{
*cur_elem_ptr=list->next;
*cur_elem_num=1;
return (*cur_elem_num);
}
else return(0);
}
llist_end(last_elem)
int last_elem;
{
return (last_elem);
}
next(i)
int i;
{
return (i+1);
}
llist_append(list,val,last_elem_num,last_elem_ptr,cur_elem_num,cur_elem_ptr,list_size)
struct node *list,**last_elem_ptr,**cur_elem_ptr;
int val,*last_elem_num,*cur_elem_num,*list_size;
{
struct node *w ,*q;
if (list_size==0)
w=list;
else
q=get_node();
w->next=q;
q->prev=w;
q->next=NULL;
q->data=val;
*last_elem_ptr=q;
*cur_elem_ptr=q;
(*list_size)++;
*cur_elem_num=*last_elem_num;
}
llist_build(list,last_elem_num,last_elem_ptr,cur_elem_num,cur_elem_ptr,list_size,indata)
struct node *list,**last_elem_ptr,**cur_elem_ptr;
int *last_elem_num,*cur_elem_num,*list_size;
FILE*indata;
{
int x;
while(!feof(indata))
{
get_data(&x,indata);
llist_append(list,last_elem_num,last_elem_ptr,cur_elem_num,cur_elem_ptr,list_size,indata);
}
}
llist_display(list)
struct node *list;
{
struct node *tmpu_node;
tmpu_node=list;
while (tmpu_node !=NULL)
{
printf(" The data is %dn",tmpu_node->data);
tmpu_node=tmpu_node->next;
}
}
find_elem(list,cur_elem_num,cur_elem_ptr,pos,ptr)
struct node *list,**cur_elem_ptr,**ptr;
int *cur_elem_num,pos;
{
struct node*tmptr;
int cntr=1;
tmptr=list->next;
while (count++<pos)
tmptr=tmptr->next;
*cur_elem_num=pos;
*cur_elem_ptr=tmptr;
return (tmptr);
}
llist_retrieve (list,pos,cur_elem_num,cur_elem_ptr)
struct node *list,**cur_elem_ptr;
int pos,*cur_elem_num;
{
struct node *elem_ptr,*find_elem();
elem_ptr=find_elem(list,cur_elem_num,cur_elem_ptr,pos);
return (elem_ptr->data);
}
main ()
{
struct node *A,*last_ptrA,*cur_ptrA;
struct node *B,*last_ptrB,*cur_ptrB;
struct node *C,*last_ptrC,*cur_ptrC;
int lastA,curA,sizeA,lastB,curB,sizeB,lastC,curC,sizeC,p,q;
int y;
indataA=fopen("in1.txt","r");
indataB=fopen("in2.txt","r");
llist_create(&A,&lastA,&last_ptrA,&curA,&cur_ptrA,&sizeA);
llist_create(&B,&lastB,&last_ptrB,&curB,&cur_ptrB,&sizeB);
llist_create(&C,&lastC,&last_ptrC,&curC,&cur_ptrC,&sizeC);
llist_build(&A,&lastA,&last_ptrA,&curA,&cur_ptrA,&sizeA,indataA);
llist_build(&B,&lastB,&last_ptrB,&curB,&cur_ptrB,&sizeB,indataB);
llist_display(A);
printf ("n");
llist_display(B);
printf ("n");
llist_display(A);
printf ("n");
llist_display(B);
printf ("n");
p=llist_first(A,&curA,&cur_ptrA,sizeA);
q=llist_first(B,&curB,&cur_ptrB,sizeB);
while ((p<=llist_end(lastA))&&(q<=llist_end(lastB)))
{
if (llist_retrieve(A,p,&curA,&cur_ptrA)< llist_retrieve (B,q,&curB,&cur_ptrB))
{
llist_append(C,llist_retrieve(A,p,&curA,&cur_ptrA),&lastC,&last_ptrC,&curC,&cur_ptrC,&sizeC);
p=next(p);
}
else
{
llist_append(C,llist_retrieve(B,q,&curB,&cur_ptrB),&lastC,&last_ptrC,&curC,&cur_ptrC,&sizeC);
if(llist_retrieve(A,p,&curA,&cur_ptrA)==llist_retrieve (B,q,&curB,&cur_ptrA))
p=next(p);
q=next(q);
}
}
if(p<=llist_end(lastA))
while(p<=llist_end (lastA))
{
llist_append(C,llist_retrieve(A,p,&curA,&cur_ptrA),&lastC,&last_ptrC,&curC,&cur_ptrC,&sizeC);
p=next(p);
}
else
while (q<=llist_end(lastB))
{
llist_append(C,llist_retrieve(B,q,&curB,&cur_ptrB),&lastC,&last_ptrC,&curC,&cur_ptrC,&sizeC);
q=next(q);
}
llist_display(C);
printf ("nn Enter any nuber to quit: ");
scanf ("%d",&y);
printf ("n Good bye!");
fclose (indataA);
fclose (indataB);
}وشاكراً لكم مرة اخرى
اخوك ابو محمد
vb2020@hotmail.com
[عدلت بواسطة محمد بدوي ت:16-05-2001 س: 08:58 PM]