لطفا يه الگوريتم واسه تبديل تاريخ ميلادي به شمسي بدين

delphish

New Member
هر كس ميتونه يه الگوريتم واسه تبديل تاريخ از ميلادي به شمسي بده اگه كد هم باشه به زبون دلفي يا C عيب نداره :eek:

[align=center:9ee5bf5b1f]متشكرم[/align:9ee5bf5b1f]
 

flashdes

Active Member
سلام
اول فاصله سالها رو حساب كنين بعدش بياين ببينين كه اگه اول سال اونا 10 دي هست حالا از اينجا برنامه شروع ميشه ميايد فاصله اون تاريخه ميلادي رو از اول سال ميلادي حساب ميكنين بعدش همين فاصله رو از روز 10 دي حساب ميفرمايين اگه كمتراز79بود خوب تقسيم بر سي كن وباقيماندش رو هم با 10 جمع كن
اگه بيشتر از 79 بود و كمتر از 265اول بيا 79 تا ازش كم كن بعدش يه سال به سالهاي شمسيت اضافه كن وبعدش تقسيم بر 31 كن واگه هم بيشتر از 265 بود خوب اول 265 تا ازش كم كن بعد 1 سال به الها اضاف كن وشش ماه هم به ماههات وبعدش تقسيم بر 30 كن اينجوري فكر كنم جالب در بياد.
 

CenoByte

Member
سلام خسته نباشيد من در اين فروم يك تاپيك بنام
؛اگه دلفي كاري بيا تو حال كن !!!؛
باز كردم تو اون ميتوني تبديل تاريخ رو پيدا كني...برام پيغام خصوصي بزن تا يونيتش رو واست ارسال كنم.
 
delphish گفت:
هر كس ميتونه يه الگوريتم واسه تبديل تاريخ از ميلادي به شمسي بده اگه كد هم باشه به زبون دلفي يا C عيب نداره :eek:

[align=center:b246950c29]متشكرم[/align:b246950c29][/quot

اين هم برنامه اش ولي به زبان پاسكال:
کد:
uses wincrt;
function ToShamsi(n:integer):string;
  var
    x,y,flag,c :integer;
    month,day:string;
  begin
  x:=1;
  y:=1;
  flag:=0;
  for x:=1 to 12 do
    begin
    if flag=1 then
      break;
    if x<7 then
      c:=31
    else
      c:=30;
    for y:=1 to c do
      begin
      if (x<=7) and (n=((x-1)*31+y)) then
        begin
        flag:=1;
        x:=x-1;
        break;
        end;
      if (x>7) and (n=(186+y+(x-7)*30)) then
        begin
        flag:=1;
        x:=x-1;
        break;
        end;
    end;
  end;
  str(x,month);
  str(y,day);
  ToShamsi:=month+'/'+day
  end;

{************************************************}

 function GetDay(n,ch:integer):string;
 var
   x:integer;
   day:integer;
 begin
   x:=1;

   while x<=n do
     begin
       x:=x+7;
     end;
     x:=x-7;
     x:=n-x;
     day:=x+ch;
     if day>7 then
       day:=day-7;
     case day of
       1: writeln('Sat');
       2: writeln('Sun');
       3: writeln('Mon');
       4: writeln('Tue');
       5: writeln('Wed');
       6: writeln('Thu');
       7: writeln('Fri');
     end;
 end;

 {***********************************************}

 function ToMiladi(sh:string):string;
 var
   month,day:string;
   x,y,l,err:integer;
   x1,y2:string;
 begin
 if copy(sh,2,1)='/' then
    begin
    l:=length(sh);
    x1:=copy(sh,1,1);
    y2:=copy(sh,3,l-2);
    end
 else
   begin
   l:=length(sh);
   x1:=copy(sh,1,2);
   y2:=copy(sh,4,l-3);
   end;
 val(x1,x,err);
 val(y2,y,err);
 case x of
   1:
     begin
     if y<12 then
       begin
       x:=3;
       y:=y+20;
       end
       else
       begin
       x:=4;
       y:=y-11;
       end;
     end;
   2:
     begin
     if y<11 then
       begin
       x:=4;
       y:=y+20;
       end
       else
       begin
       x:=5;
       y:=y-10;
       end;
     end;
   3:
     begin
     if y<11 then
       begin
       x:=5;
       y:=y+21;
       end
       else
       begin
       x:=6;
       y:=y-10;
       end;
     end;
   4:
     begin
     if y<10 then
       begin
       x:=6;
       y:=y+21;
       end
       else
       begin
       x:=7;
       y:=y-9;
       end;
     end;
   5:
     begin
     if y<10 then
       begin
       x:=x+2;
       y:=y-9;
       end
       else
       begin
       x:=x+3;
       y:=y-9;
       end;
     end;
   6:
     begin
     if y<10 then
       begin
       x:=x+2;
       y:=y-9;
       end
       else
       begin
       x:=x+3;
       y:=y-9;
       end;
     end;
   8:
     begin
     if y<10 then
       begin
       x:=x+2;
       y:=y-9;
       end
       else
       begin
       x:=x+3;
       y:=y-9;
       end;
     end;
   7:
     begin
     if y<9 then
       begin
       x:=9;
       y:=y+22;
       end
       else
       begin
       x:=10;
       y:=y-8;
       end;
     end;
   9:
     begin
     if y<10 then
       begin
       x:=11;
       y:=y-21;
       end
       else
       begin
       x:=12;
       y:=y-9;
       end;
     end;
   10:
     begin
     if y<11 then
       begin
       x:=12;
       y:=y+21;
       end
       else
       begin
       x:=1;
       y:=y-10;
       end;
     end;
   11:
     begin
     if y<12 then
       begin
       x:=1;
       y:=y+20;
       end
       else
       begin
       x:=2;
       y:=y-11;
       end;
     end;
   12:
     begin
     if y<10 then
       begin
       x:=2;
       y:=y+19;
       end
       else
       begin
       x:=3;
       y:=y-9;
       end;
     end;
   end;
  str(x,month);
  str(y,day);
  ToMiladi:=month+'/'+day
 end;

 {***********************************************}
 {Main Body}
var
  n,ch:integer;
  shamsi:string;
begin
writeln('Please enter an integer number for the days of the week.');
writeln('( 1->Sat  2->Sun  3->Mon  4->Tue  5->Wed  6->Thu  7->Fri )');
readln(ch);
if ((ch>7) or (ch<1)) then
  begin
  writeln('Err:You should enter an integer number between 0 and 8.');
  readln;
  halt;
  end;

writeln('Please enter the day of year:');
readln(n);
if (n>366) or (n<1) then
  begin
  writeln('error: You should enter an integer number between 0 and 367' );
  readln;
  halt;
  end;

writeln('----------------------Result is-----------------------------');
GetDay(n,ch);
shamsi:=ToShamsi(n);
writeln('Shamsi = ',shamsi);
writeln('Miladi = ',ToMiladi(shamsi));
readln;
end.

از طرف محسن سليماني :wink:
 

جدیدترین ارسال ها

بالا