View Full Version : کمک در مرتب سازی دو بعدی به روش دودوی در پاسکال
ironclip
چهارشنبه 02 تیر 1389, 12:08 عصر
سلام کسی هست در این قسمت کمکم کنه
این برنامه رو نوشتم اما در قسمت مرتب سازی دو بعدی موندم
کسی هست کمک کنه
می خوام بر حسب کد کارمند مرتب بشه و در خروجی چاچ بشه
کسی هیت کمک کنه دریغ نکنه
ironclip
چهارشنبه 02 تیر 1389, 13:37 عصر
دوستان عزیز من این برنامه رو نوشتم فقط برای مرتب کردنش نمی دونم چکار کنم
می خوام مرتب کردنش بر حسب کد کارمندی باشه
اگه می تونید کمک کنید ، خیلی احتیاجش دارم
ممنون می شم
uses crt;
var
info : array[1..100,1..3] of string[30];
no : array[1..100,1..8] of real;
i,j,n,emno : integer;
begin
writeln('Enter Number Of Employee which you want to add,Maximum is 100');
readln(n);
if n>100 then
writeln('Number Is Greater than 100,program will work But in continue you have problem');
for i:= 1 to n do
for j:= 1 to 5 do
begin
case j of
1 :
begin
writeln('Enter First Name OF Employee',' ',i);
readln(info[i,1]);
end;
2 :
begin
writeln('Enter Last Name OF Employee',' ',i);
readln(info[i,2]);
end;
3 :
begin
writeln('Enter Employee Code OF Employee',' ',i);
readln(no[i,1]);
end;
4 :
begin
writeln('Enter Hours work of Employee',' ',i);
readln(no[i,2]);
end;
5 :
begin
writeln('earn per hours of employee',' ',i);
readln(no[i,3]);
end;
end;
no[i,4]:=no[i,2]*no[i,3];{hogoogh}
no[i,5]:=no[i,4]*(10/100);{maliyat}
no[i,6]:=no[i,4]*(7/100);{bimeh}
no[i,7]:=no[i,4]-no[i,5]-no[i,6];{daryafti}
end;
writeln;
writeln('Entering Information Compilited!');
writeln('Now You can Enter Employee Code and recive information');
readln(emno);
for i:= 1 to n do
if emno=no[i,1] then
begin
writeln('Information Of Employee',' ',i);
writeln(' Full name : ',info[i,1],' ',info[i,2]);
writeln(' Employee Code : ',no[i,1]:8:2);
writeln( 'Hours of work : ',no[i,2]:8:2);
writeln(' Earn Per Hours : ',no[i,3]:8:2);
writeln(' Hoghooghe Khales : ',no[i,4]:8:2);
writeln('Kasre Haghe Bimeh : ',no[i,6]:8:2);
writeln(' Kasre Maliyat : ',no[i,5]:8:2);
writeln(' Daryafti : ',no[i,7]:8:2);
end;
i:= i+1;
if i > n then
writeln('There is No Employee With Upper Code');
end.
مهران رسا
چهارشنبه 02 تیر 1389, 14:05 عصر
یکی از روش های مرتب سازی اینه که کد کارمندان رو در یک آرایه قرار بدید بعد خانه ی x رو با خانه ی x+1 مقایسه کنید و در صورت لزوم مقادیر خانه های x و x+1 رو باهم تعویض کنید تا در نهایت یک لیست مثلاً صعوی یا نزولی داشته باشید .
ironclip
چهارشنبه 02 تیر 1389, 14:13 عصر
کاملا درسته اما این روش برای آرایه ای یک بعدی هست
من این مرتب سازی را برای آرایه ای دوبعدی می خوام
اگه میشه سورس آرایه دوبعدی را در اینجا قرار بدید ممنون میشم
من خیلی گشتم اما نتونستم پیدا کنم یا برنامشو بنویسم
ironclip
چهارشنبه 02 تیر 1389, 15:53 عصر
آره M8SPY (http://www.barnamenevis.org/forum/member.php?u=58987) جان درست گفتید i+1 میتونیم این کارو انجام بدیم اما الان من کجای این برنامه را بیاد دستکاری کنم
طوری که برنامه به هم نریزه .
می شه سورس این مرتب کردن را بزارید
مهران رسا
چهارشنبه 02 تیر 1389, 16:31 عصر
در کدی که شما نوشتید تنها یک بعد از آرایه مقادیر متغیر میگیره . پس باید در حلقه ای که برای پیمایش اعضای آرایه (مرتب سازی) مینویسید بعد دوم ثابت باشه و بعد اول توسط مقدار شمارنده حلقه ارزیابی بشه .
SAASTN
چهارشنبه 02 تیر 1389, 18:05 عصر
info : array[1..100,1..3] of string[30];
no : array[1..100,1..8] of real;
من درست متوجه نمی شم که چه جور مرتبسازی می خواید انجام بدین؟
اما حدسم اینه که می خواین هر دوی آرایه ها رو بر حسب درایه اول بعد دوم آرایه no مرتب کنید؟
var
TempNo: array [1..8] of real;
TempInfo: array [1..3] of String[30];
begin
for i := 1 to 99 do
for J := I + 1 to 100 do
if No[I, 1] > No[J, 1] then
begin
TempNo := No[I];
No[I] := No[J];
No[J] := TempNo[I];
TempInfo := Info[I];
Info[I] := Info[J];
Info[J] := TempInfo[I];
end;
end;
نکته 1: شما توی این مورد اصلا نباید از آرایه دو بعدی استفاده کنید، بلکه باید یه رکورد تعریف کنید:
type
TEmployeeInfo = record
Code: Integer;
FirstName: string[30];
LastName: string[30];
//... other fields come here
end;
نکته 2: سعی کنید توی تعریف لیست ها و آرایه ها خودتون رو به تعریف اندیس آغاز صفر عادت بدین. چون استاندارد اینه و همه کدها به این صورت نوشته میشه. بعدا دچار تناقض تو کد نویسی می شین. مثل من که الان با مشکل کد رو نوشتم چون به صفر تا n-1 عادت دارم.
ironclip
چهارشنبه 02 تیر 1389, 19:20 عصر
تشکر SAASTN (http://www.barnamenevis.org/forum/member.php?u=21955) جان ، اما من تاحالا با رکورد کار نکرده ام چون تازه واردم تو پاسکال
این روش مرتب کردنی که گفتی از دو آرایه استفاده کرده اید
نمی شد از این روش استفاده کنیم
var
no : array[1..100,1..8] of real ;
temp : real;
begin
for i := 1 to 100 do
for J := I + 0 to 100 do
if No[I, 1] > No[J, 1] then
begin
Temp := No[i];
No[i] := No[J];
No[J] := Temp;
end;
end;
دوستان کسی می دونه سورسی که دادم در پست اول درست کنند
خیلی گیر کردم :افسرده:
SAASTN
چهارشنبه 02 تیر 1389, 20:53 عصر
البته به نظر پروژه دانشجویی میاد که انجامش توی این سایت ممنوعه.
سوالات شما هم جنسش یجوریه که به این بخش مربوط نمیشه و باید تو تالار ساختمان و الگوریتم مطرحش کنی، ولی به هر حال ...
اما من تاحالا با رکورد کار نکرده ام چون تازه واردم تو پاسکال
خوب همینجا درست جاییه که می تونید شروع کنید.
نمی شد از این روش استفاده کنیم
خیر، No یه آرایه دوبعدی از Realه. یعنی هرکدوم از درایه های اون خودشون یه آرایه یک بعدی از Real هستند که شما سعی کردین بریزینشون تو یه متغیر Real.
به نظرم سورسی که تو پست 7 دادم واضحه. اگه مشکلی هست بگید تا بیشتر توضیح بدم.
ironclip
شنبه 05 تیر 1389, 11:02 صبح
مرسی SAASTN (http://www.barnamenevis.org/forum/member.php?u=21955) عزیز خیلی ممنون
من اینو نوشتم فقط هنوز کد مرتب کردنشو ننوشتم . الان این برنامه را بر حسب record نوشتم
اما می خوام اجراش کنم و ورودی را بگیره ارورر می ده
یکی از دوستان ببینه مشکل این چیه ؟
program test;
uses wincrt;
type
temployeeinfo = record
code: Integer;
firstname: string[30];
lastname: string[30];
employeework: real;
employeehours: real;
end;
var
info : array[0..99] of temployeeinfo;
n,i,j:integer;
begin
writeln('Enter Number Of Employee which you want to add,Maximum is 100');
readln(n);
if n>100 then
writeln('Number Is Greater than 100,program will work But in continue you have problem');
for i:= 1 to n do
begin
for j:= 1 to 5 do
begin
case j of
1 :
begin
writeln('Enter First Name OF Employee',' ',i);
readln(info.firstname[i]);
end;
2 :
begin
writeln('Enter Last Name OF Employee',' ',i);
readln(info.lastname[i]);
end;
3 :
begin
writeln('Enter Employee code OF Employee',' ',i);
readln(info.code[i]);
end;
4 :
begin
writeln('Enter Hours work of Employee',' ',i);
readln(info.employework[i]);
end;
5 :
begin
writeln('earn per hours of employee',' ',i);
readln(info.employehours[i]);
end;
end;
end;
for i := 1 to n do
begin
for j:=1 to 5 do
begin
case j of
1:
begin
writeln(info.firstname [i]);
end;
2:
begin
writeln(info.lastname [i]);
end;
3:
begin
writeln(info.code [i]);
end;
4:
begin
writeln(info.employework [i]);
end;
5:
begin
writeln(info.employehours [i]);
end;
writeln('---------------------------------');
end;
end;
end.
ironclip
شنبه 05 تیر 1389, 11:39 صبح
الان من این مشکل را حل کردم حالا چرا در خط آخر منظورم end آخر ارورر میگیره
چند بار چک کردم تمام endها درست در جای خودشون نوشته شده
شما این کدو ببینید
ببینید مشکل کجاست :
program test;
uses wincrt;
type
temployeeinfo = record
code: Integer;
firstname: string[30];
lastname: string[30];
employeework: real;
employeehours: real;
end;
var
info : array[0..49] of temployeeinfo;
n,i,j:integer;
begin
writeln('Enter Number Of Employee which you want to add,Maximum is 50');
readln(n);
if n>50 then
writeln('Number Is Greater than 50 , program will work But in continue you have problem');
for i:= 1 to n do
begin
for j:= 1 to 5 do
begin
case j of
1 :
begin
writeln('Enter First Name OF Employee',' ',i);
readln(info[i].firstname);
end;
2 :
begin
writeln('Enter Last Name OF Employee',' ',i);
readln(info[i].lastname);
end;
3 :
begin
writeln('Enter Employee code OF Employee',' ',i);
readln(info[i].code);
end;
4 :
begin
writeln('Enter Hours work of Employee',' ',i);
readln(info[i].employeework);
end;
5 :
begin
writeln('earn per hours of employee',' ',i);
readln(info[i].employeehours);
end;
end;
end;
for i:= 1 to n do
begin
for j:=1 to 6 do
begin
case j of
1:
begin
writeln('First Name OF Employee : ',info[i].firstname);
end;
2:
begin
writeln('Last Name OF Employee : ',info[i].lastname);
end;
3:
begin
writeln('Employee code OF Employee : ',info[i].code);
end;
4:
begin
writeln('Hours work of Employee : ',info[i].employeework);
end;
5:
begin
writeln(' per hours of employee : ',info[i].employeehours);
end;
6:
begin
writeln('---------------------------------');
end;
end;
end;
END.
ironclip
شنبه 05 تیر 1389, 23:06 عصر
سلام و خسته نباشید به همه
راستی من خیلی تلاش کردم
تونستم همراه با record و بدون record همون سورسی که در پست اول گزاشتم برنامه را تکمیل کنم
از همه دوستان که در این امر کمک کردن تشکر و سپاس گزارم
:قلب: :قلب: تــــــــــــشـــکر
SAASTN
شنبه 05 تیر 1389, 23:39 عصر
تونستم همراه با record و بدون record همون سورسی که در پست اول گزاشتم برنامه را تکمیل کنم
پس ببخشید که دیر جواب می دم، اما سورس رو مرتب کردم و میذارم:
type
TEmployeeInfo = record
Code: Integer;
Firstname: string[30];
Lastname: string[30];
EmployeeWork: Real;
EmployeeHours: Real;
end;
var
Info: array [0 .. 49] of TEmployeeInfo;
N, I, J: Integer;
begin
Writeln('Enter Number Of Employee which you want to add,Maximum is 50');
readln(N);
if N > 50 then
Writeln('Number Is Greater than 50 , program will work But in continue you have problem');
for I:= 1 to N do
begin
for J:= 1 to 5 do
case J of
1 :
begin
Writeln('Enter First Name OF Employee',' ',I);
Readln(Info[I].Firstname);
end;
2 :
begin
Writeln('Enter Last Name OF Employee',' ',I);
Readln(Info[I].Lastname);
end;
3 :
begin
Writeln('Enter Employee code OF Employee',' ',I);
Readln(Info[I].Code);
end;
4 :
begin
Writeln('Enter Hours work of Employee',' ',I);
Readln(Info[I].EmployeeWork);
end;
5 :
begin
Writeln('earn per hours of employee',' ',I);
Readln(Info[I].EmployeeHours);
end;
end;
end;
for I:= 1 to N do
for J:=1 to 6 do
case J of
1:
Writeln('First Name OF Employee : ',Info[I].Firstname);
2:
Writeln('Last Name OF Employee : ',Info[I].Lastname);
3:
Writeln('Employee code OF Employee : ',Info[I].Code);
4:
Writeln('Hours work of Employee : ',Info[I].EmployeeWork);
5:
Writeln(' per hours of employee : ',Info[I].EmployeeHours);
6:
Writeln('---------------------------------');
end;
Readln(I);
end.
کدی که قرار داده بودید بسیار کثیف بود، اگه فاصله گذاری ها رو رعایت کنید و begin/end های اضافی ننویسید این مشکلات کمتر میشه.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.