View Full Version : کمک در مرتب سازی دو بعدی به روش دودوی در پاسکال
  
ironclip
چهارشنبه 02 تیر 1389, 13:08 عصر
سلام کسی هست در این قسمت کمکم کنه
این برنامه رو نوشتم اما در قسمت مرتب سازی دو بعدی موندم
کسی هست کمک کنه
می خوام بر حسب کد کارمند مرتب بشه و در خروجی چاچ بشه
کسی هیت کمک کنه دریغ نکنه
ironclip
چهارشنبه 02 تیر 1389, 14: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, 15:05 عصر
یکی از روش های مرتب سازی اینه که کد کارمندان رو در یک آرایه قرار بدید بعد خانه ی x رو با خانه ی x+1 مقایسه کنید و در صورت لزوم مقادیر خانه های x و x+1 رو باهم تعویض کنید تا در نهایت یک لیست مثلاً صعوی یا نزولی داشته باشید .
ironclip
چهارشنبه 02 تیر 1389, 15:13 عصر
کاملا درسته اما این روش برای آرایه ای یک بعدی هست
من این مرتب سازی را برای آرایه ای دوبعدی می خوام 
اگه میشه سورس آرایه دوبعدی را در اینجا قرار بدید ممنون میشم 
من خیلی گشتم اما نتونستم پیدا کنم یا برنامشو بنویسم
ironclip
چهارشنبه 02 تیر 1389, 16:53 عصر
آره M8SPY (http://www.barnamenevis.org/forum/member.php?u=58987) جان درست گفتید i+1 میتونیم این کارو انجام بدیم اما الان من کجای این برنامه را بیاد دستکاری کنم 
طوری که برنامه به هم نریزه .
می شه سورس این مرتب کردن را بزارید
مهران رسا
چهارشنبه 02 تیر 1389, 17:31 عصر
در کدی که شما نوشتید تنها یک بعد از آرایه مقادیر متغیر میگیره . پس باید در حلقه ای که برای پیمایش اعضای آرایه (مرتب سازی) مینویسید بعد دوم ثابت باشه و بعد اول توسط مقدار شمارنده حلقه ارزیابی بشه .
SAASTN
چهارشنبه 02 تیر 1389, 19: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, 20: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, 21:53 عصر
البته به نظر پروژه دانشجویی میاد که انجامش توی این سایت ممنوعه.
سوالات شما هم جنسش یجوریه که به این بخش مربوط نمیشه و باید تو تالار ساختمان و الگوریتم مطرحش کنی، ولی به هر حال ...
 اما من تاحالا با رکورد کار نکرده ام چون تازه واردم تو پاسکال
خوب همینجا درست جاییه که می تونید شروع کنید.
نمی شد از این روش استفاده کنیم
خیر، No یه آرایه دوبعدی از Realه. یعنی هرکدوم از درایه های اون خودشون یه آرایه یک بعدی از Real هستند که شما سعی کردین بریزینشون تو یه متغیر Real.
به نظرم سورسی که تو پست 7 دادم واضحه. اگه مشکلی هست بگید تا بیشتر توضیح بدم.
ironclip
شنبه 05 تیر 1389, 12: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, 12: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
یک شنبه 06 تیر 1389, 00:06 صبح
سلام و خسته نباشید به همه 
راستی من خیلی تلاش کردم 
تونستم همراه با record و بدون record  همون سورسی که در پست اول گزاشتم برنامه را تکمیل کنم 
از همه دوستان که در این امر کمک کردن تشکر و سپاس گزارم 
:قلب: :قلب: تــــــــــــشـــکر
SAASTN
یک شنبه 06 تیر 1389, 00: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.