PDA

View Full Version : حل مشکل آرایه پویا



zizi_zizi69
پنج شنبه 05 خرداد 1384, 18:33 عصر
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
struct property
{
int wait;
char Delet;
char name_Type;
int arrive_Time;
int wight;
int move;

};
int main()
{int TS,*Array_A,*Array_B,*Array_c,k,n,m,o,N,wight,Ahte mal,x,j,i,num_A,num_B,num_C,sum_A,
sum_B,sum_C,move_A,move_B,move_C,Avg_waitA,Avg_wai tB,Avg_waitC,
Avg_moveA,Avg_moveB,Avg_moveC,Time,item;
//struct property main_Array[k];
printf("input the time of the system :");
scanf("%d",&Time);
n=Time/3;
m=Time/6;
o=Time/2;
k=m+n+o;
struct property main_Array[100];
Array_A=(int *)malloc(sizeof(int)*n );
Array_B=(int *)malloc(sizeof(int)*m );
Array_c=(int *)malloc(sizeof(int)*o );
randomize();
Array_A[0]=0;
for(i=1;i<=n;++i)
x=3+random(5);
Array_A[i]=Array_A[i-1]+x;
Array_B[0]=0;
for(i=1;i<=m;++i)
Array_B[i]=Array_B[i]+6;
Array_c[0]=0;
randomize();
for(i=1;i<=0;++i)
{
Ahtemal=random(100);
if(Ahtemal<=33)
x=2;
else
x=3;
Array_c[i]=Array_c[i-1]+x;
}

//MAKING THE MAIN_ARRAY
for(j=0,i=0;i<=n;i++,j++)
{
main_Array[j].arrive_Time=Array_A[i];
main_Array[j].name_Type="A";
}
for(i=0;i<=o;i++,j++)
{
main_Array[j].arrive_Time=Array_c[i];
main_Array[j].name_Type="c";
}

for(i=0;i<=o;i++,j++)
{
main_Array[j].arrive_Time=Array_B[i];
main_Array[j].name_Type="B";
}
//SORTING THE MAIN_ARRAY
for (i=m+n+o ;i>o;i--)
{for (j=0;j<i;j++)
{
if (main_Array[j].arrive_Time > main_Array[j+1].arrive_Time)
{
item= main_Array[j].arrive_Time;
main_Array[j].arrive_Time = main_Array[j+1].arrive_Time;
main_Array[j+1].arrive_Time=item;
}
}
}
//MAIN PROSES
TS=0;
while(TS<Time )
{
wight=0;
for (i=0;wight<400;++i)
{
if (wight+ main_Array[i].wight<=400 && main_Array[i].Delet=1)
{
wight=wight+main_Array[i].wight;
main_Array[i].Delet=0 ;
if(main_Array[i].arrive_Time>Time)
break;
if(TS>main_Array[i].arrive_Time)
main_Array[i].wait=TS-main_Array[i].arrive_Time;
}//end if

}//end for
if(main_Array[i].arrive_Time>Time)
break;
if(main_Array[i].arrive_Time<=TS)
TS=TS+4;
else
TS=main_Array[i].arrive_Time+4;
N=i;
for(i=0;i<=N;++i)
if (main_Array[i].Delet==0)
main_Array[i].move= TS - main_Array[i].arrive_Time -1;

num_A=0;num_B=0;num_C=0;
sum_A=0;sum_B=0;sum_C=0;
move_A=0;move_B=0;move_C=0;
for(i=0;main_Array[i].Delet==0&&i<=m+n+o;i++)
{
switch(main_Array[i].name_Type)
{
case 'A':
num_A++;
sum_A+=main_Array[i].wait;
move_A+=main_Array[i].move;
break;
case 'B':
num_B++;
sum_B+=main_Array[i].wait;
move_B+=main_Array[i].move;
break;
case 'C':
num_C++;
sum_C+=main_Array[i].wait;
move_C+=main_Array[i].move;
break;

}//end switch
}
Avg_moveA=(move_A)/num_A;
Avg_waitA=(sum_A)/num_A;
Avg_moveB=(move_B)/num_B;
Avg_waitB=(sum_B)/num_B;
Avg_moveC=(move_C)/num_C;
Avg_waitC=(sum_C)/num_C;
printf("The Avrage wating Time For object A is :%d",Avg_waitA);
printf("The Avrage wating Time For object B is :%d",Avg_waitB);
printf("The Avrage wating Time For object C is :%d",Avg_waitC);
printf("The Avrage moving Time For object A is :%d",Avg_moveA);
printf("The Avrage moving Time For object B is :%d",Avg_moveB);
printf("The Avrage moving Time For object C is :%d",Avg_moveC);
}







در این برنامه(که پروژه شبیه سازی یک سیستم است.که در آن اجسام a,b,c در فاصله زمانی مشخص وارد سیستم میشوند ودر یک باربر قرار می گیرند باربر باین شرط حرکت می کند که وزن آن به 400 برسد.ما سه آرایه برای اجسام بر اساس زمان ورود
که بصورت تصادفی است درنظر گرفتیم .درآرایه آخری سه آرایه را بر اساس زمان ورودمرتب کردیم.حال زمان انتظار ومیزان جابجایی هر جسم را بدست می آوریم. )
ما آرایه ای پویا از ساختمانها تعریف کردیم ولی در هنگام کامپایلerror زیر
را دارد.
error 53:cannot convert 'char*' to' 'char on fanction main

rezaTavak
پنج شنبه 05 خرداد 1384, 22:16 عصر
سلام

شماره خط 53 کدامه؟؟

karim_medusa
پنج شنبه 05 خرداد 1384, 22:58 عصر
5 تا خطا داره و دو تا هشدار !

در تعریف ساختار :
<span dir=ltr>
struct property
{
int wait;
char Delet; char name_Type;
int arrive_Time;
int wight;
int move;
}; </span>
از نوع کاراکتر تعریف شده در حالی که اینجا رو ببینید :

<span dir=ltr> for(j=0,i=0;i&lt;=n;i++,j++)
{
main_Array[j].arrive_Time=Array_A[i];
main_Array[j].name_Type="A"; }
for(i=0;i&lt;=o;i++,j++)
{
main_Array[j].arrive_Time=Array_c[i];
main_Array[j].name_Type="c"; }

for(i=0;i&lt;=o;i++,j++)
{
main_Array[j].arrive_Time=Array_B[i];
main_Array[j].name_Type="B";
}</span>و این یکی هم

<span dir=ltr>
if (wight+ main_Array[i].wight&lt;=400 &amp;&amp; main_Array[i].Delet=1)</span>

متوجه شدین ؟؟

zizi_zizi69
شنبه 14 خرداد 1384, 01:19 صبح
با عرض معذرت بخاطر اینکه دیر جواب میدم.
بله متو جه شدم و راهنمایتون مفید بود.
این هم برنامه با خروجی.



#include&lt;stdlib.h>
#include&lt;stdio.h>
#include&lt;conio.h>
struct property
&#123;
int wait;
char Delet;
char name_Type;
int arrive_Time;
int wight;
int move;

&#125;;
int main&#40;&#41;
&#123;int TS,*Array_A,*Array_B,*Array_c,k,n,m,o,N,ah,bh,ch,i temname,wight,Ahtemal,x,j,i,num_A,num_B,num_C,sum_ A,
sum_B,sum_C,move_A,move_B,move_C,Avg_waitA,Avg_wai tB,Avg_waitC,
Avg_moveA,Avg_moveB,Avg_moveC,Time,item;
//struct property main_Array&#91;k&#93;;
clrscr&#40;&#41;;
printf&#40;"input the time of the system in the rang of 0 to 200&#58;"&#41;;
scanf&#40;"%d",&amp;Time&#41;;

n=Time/3;
m=Time/6;
o=Time/2;
struct property main_Array&#91;200&#93;;
Array_A=&#40;int *&#41;malloc&#40;sizeof&#40;int&#41;*n &#41;;
Array_B=&#40;int *&#41;malloc&#40;sizeof&#40;int&#41;*m &#41;;
Array_c=&#40;int *&#41;malloc&#40;sizeof&#40;int&#41;*o &#41;;
randomize&#40;&#41;;
Array_A&#91;0&#93;=0;
for&#40;i=1;i&lt;=n;++i&#41;
&#123; x=3+random&#40;5&#41;;
Array_A&#91;i&#93;=Array_A&#91;i-1&#93;+x;
&#125;
Array_B&#91;0&#93;=0;
for&#40;i=1;i&lt;=m;++i&#41;
Array_B&#91;i&#93;=Array_B&#91;i-1&#93;+6;

Array_c&#91;0&#93;=0;
randomize&#40;&#41;;
for&#40;i=1;i&lt;=o;++i&#41;
&#123;
Ahtemal=random&#40;100&#41;;
if&#40;Ahtemal&lt;=33&#41;
x=2;
else
x=3;
Array_c&#91;i&#93;=Array_c&#91;i-1&#93;+x;
&#125;

//MAKING THE MAIN_ARRAY
for&#40;j=0,i=0;i&lt;=n &amp;&amp; Array_A&#91;i&#93;&lt;=Time;i++,j++&#41;
&#123;
main_Array&#91;j&#93;.arrive_Time=Array_A&#91;i&#93;;
main_Array&#91;j&#93;.name_Type='A';
&#125; ah=i;
for&#40;i=0;i&lt;=o &amp;&amp; Array_c&#91;i&#93;&lt;=Time;i++,j++&#41;
&#123;
main_Array&#91;j&#93;.arrive_Time=Array_c&#91;i&#93;;
main_Array&#91;j&#93;.name_Type='c';
&#125; ch=i;

for&#40;i=0;i&lt;=m &amp;&amp; Array_B&#91;i&#93;&lt;=Time;i++,j++&#41;
&#123;
main_Array&#91;j&#93;.arrive_Time=Array_B&#91;i&#93;;
main_Array&#91;j&#93;.name_Type='B';
&#125; bh=i;
//SORTING THE MAIN_ARRAY
for &#40;i=ah+bh+ch ;i>0;i--&#41;
&#123;for &#40;j=0;j&lt;i;j++&#41;
&#123;
if &#40;main_Array&#91;j&#93;.arrive_Time > main_Array&#91;j+1&#93;.arrive_Time&#41;
&#123;
item= main_Array&#91;j&#93;.arrive_Time;
main_Array&#91;j&#93;.arrive_Time = main_Array&#91;j+1&#93;.arrive_Time;
main_Array&#91;j+1&#93;.arrive_Time=item;
itemname= main_Array&#91;j&#93;.name_Type;
main_Array&#91;j&#93;.name_Type = main_Array&#91;j+1&#93;.name_Type;
main_Array&#91;j+1&#93;.name_Type=itemname;
&#125;
&#125;
&#125;
for&#40;i=0;i&lt;=ah+bh+ch-1;++i&#41;
switch&#40;main_Array&#91;i&#93;.name_Type&#41;
&#123;
case 'A'&#58;
main_Array&#91;i&#93;.wight=200;
break;
case 'B'&#58;
main_Array&#91;i&#93;.wight=100;
break;
case 'c'&#58;
main_Array&#91;i&#93;.wight=50;
break;
&#125;


//MAIN PROSES
num_A=0;num_B=0;num_C=0;
sum_A=0;sum_B=0;sum_C=0;
move_A=0;move_B=0;move_C=0;
Avg_waitA=0;Avg_waitB=0;Avg_waitC=0;
Avg_moveA=0;Avg_moveB=0;Avg_moveC=0;
TS=0;
for&#40;i=0;i&lt;ah+bh+ch;i++&#41;
&#123;
main_Array&#91;i&#93;.Delet='1';
main_Array&#91;i&#93;.wait=0;

&#125;
while&#40;TS&lt;Time &#41;
&#123;
wight=0;i=0;
for &#40;i=0;i&lt;ah+bh+ch&amp;&amp;wight&lt;400;++i&#41;
&#123;
if &#40; wight+main_Array&#91;i&#93;.wight&lt;=400 &amp;&amp; main_Array&#91;i&#93;.Delet=='1'&#41;
&#123;
wight=wight+main_Array&#91;i&#93;.wight;
main_Array&#91;i&#93;.Delet='0' ;
if&#40;main_Array&#91;i&#93;.arrive_Time>Time&#41;
break;
if&#40;TS>main_Array&#91;i&#93;.arrive_Time&#41;
main_Array&#91;i&#93;.wait=TS-main_Array&#91;i&#93;.arrive_Time;
printf&#40;"%c",main_Array&#91;i&#93;.name_Type&#41;;

&#125;//end if

&#125;//end for
if&#40;main_Array&#91;i-1&#93;.arrive_Time>Time&#41;
break;
if&#40;main_Array&#91;i-1&#93;.arrive_Time&lt;=TS&#41;
TS=TS+4;
else
TS=main_Array&#91;i-1&#93;.arrive_Time+4;
if&#40;TS>Time&#41;
break;
printf&#40;" %d",TS&#41;;
printf&#40;"\n"&#41;;
&#125;//end while

for&#40;i=0 ; i&lt;=ah+bh+ch ; i++&#41;
&#123;
switch&#40;main_Array&#91;i&#93;.name_Type&#41;
&#123;
case 'A'&#58;
num_A++;
sum_A+=main_Array&#91;i&#93;.wait;
main_Array&#91;i&#93;.move=main_Array&#91;i&#93;.wait+3;
move_A+=main_Array&#91;i&#93;.move;
break;
case 'B'&#58;
num_B++;
sum_B+=main_Array&#91;i&#93;.wait;
main_Array&#91;i&#93;.move=main_Array&#91;i&#93;.wait+3;
move_B+=main_Array&#91;i&#93;.move;
break;
case 'c'&#58;
num_C++;
sum_C+=main_Array&#91;i&#93;.wait;
main_Array&#91;i&#93;.move=main_Array&#91;i&#93;.wait+3;
move_C+=main_Array&#91;i&#93;.move;
break;

&#125;//end switch
&#125;//end for

Avg_moveA=move_A/num_A;
Avg_waitA=sum_A/num_A;
Avg_moveB=move_B/num_B;
Avg_waitB=sum_B/num_B;
Avg_moveC=move_C/num_C;
Avg_waitC=sum_C/num_C;
printf&#40;"\nThe number For object A is &#58;%d",num_A&#41;;
printf&#40;"\nThe number For object B is &#58;%d",num_B&#41;;
printf&#40;"\nThe number For object C is &#58;%d",num_C&#41;;
printf&#40;"\nThe Avrage wating Time For object A is &#58;%d",Avg_waitA&#41;;
printf&#40;"\nThe Avrage wating Time For object B is &#58;%d",Avg_waitB&#41;;
printf&#40;"\nThe Avrage wating Time For object C is &#58;%d",Avg_waitC&#41;;
printf&#40;"\nThe Avrage moving Time For object A is &#58;%d",Avg_moveA&#41;;
printf&#40;"\nThe Avrage moving Time For object B is &#58;%d",Avg_moveB&#41;;
printf&#40;"\nThe Avrage moving Time For object C is &#58;%d",Avg_moveC&#41;;
getch&#40;&#41;;
return 0;
&#125;