تبليغاتX
اندیشه های درهم برهم!
وبلاگی در مورد هر اندیشه ای که ممکن است به ذهن خطور کند.
متاسفانه به دلیل فرا رسیدن فصل امتحانات نمی تونم وبلاگ رو بروز کنم. منتظر پست های بعدی باشید!

+ نوشته شده در  شنبه 13 خرداد1385ساعت 14:24  توسط ارحام عموئی  | 

همین امروز یکی از بچه های ریاضی محض ازم خواست یه پروژه که استاد مبانی کامپیوتر و برنامه نویسی شون داده بود رو براش انجام بدم. موضوع پروژه هم این بود: برنامه ای به زبان پاسکال بنویسید که یک سال میلادی را از ورودی بگیرد و تقویم آن را نمایش دهد. خب چون ایشون از آشنایان ما بودند من هم قبول کردم و برنامه رو نوشتم. راستش هر چند یه یک ساعتی نوشتنش طول کشید ولی خیلی چسبید، چون مدت ها بود که با پاسکال کار نکرده بودم. فایل اجرایی برنامه رو که حجمش فقط ۷ کیلو بایت هست، می تونید از اینجا دانلود کنید. در زیر، سورس کد این برنامه رو می یارم که می تونه واسه کسانی که می خواند تو برنامه نویسی پاسکال پبشرفت کنند مفید و جالب باشه.

uses Crt;

var
  Year, Month, Day: Integer;
  Y, C, W: Integer;
  i: Integer;
  MonthName: string;
  Row: Integer;
  MonthLength: Integer;
begin
  Clrscr;
  Write('Year = ? ');
  Readln(Year);
  Y := Year mod 100;
  C := Year div 100;
  for i := 1 to 12 do
  begin
    if i <= 2 then Month := i + 10 else Month := i - 2;
    case Month of
      11:
        begin
          MonthName := 'January';
          MonthLength := 31;
        end;
      12:
        begin
          MonthName := 'February';
          MonthLength := 28;
        end;
      1:
        begin
          MonthName := 'March';
          MonthLength := 31;
        end;
      2:
        begin
          MonthName := 'April';
          MonthLength := 30;
        end;
      3:
        begin
          MonthName := 'May';
          MonthLength := 31;
        end;
      4:
        begin
          MonthName := 'June';
          MonthLength := 30;
        end;
      5:
        begin
          MonthName := 'July';
          MonthLength := 31;
        end;
      6:
        begin
          MonthName := 'August';
          MonthLength := 31;
        end;
      7:
        begin
          MonthName := 'September';
          MonthLength := 30;
        end;
      8:
        begin
          MonthName := 'October';
          MonthLength := 31;
        end;
      9:
        begin
          MonthName := 'November';
          MonthLength := 30;
        end;
      10:
        begin
          MonthName := 'December';
          MonthLength := 31;
        end;
    end;
    Clrscr;
    Write(MonthName + ' ');
    Writeln(Year);
    Writeln;
    Writeln('Su   Mo   Tu   We   Th   Fr   Sa');
    Row := 1;
    for Day := 1 to MonthLength do
    begin
      W := (Day + Trunc(2.6 * Month - 0.2) - 2 * C +
        Y + Trunc(Y / 4) + Trunc(C / 4)) mod 7;
      if W < 0 then W := 7 + W;
      GotoXY(W * 5 + 1, Row + 3);
      Write(Day);
      if W = 6 then Inc(Row);
    end;
    GotoXY(1, 12);
    Writeln('Press Enter to continue...');
    Readln;
  end;
end.

اگه پس از اجرا سال مورد نظرمون مثلاْ ۲۰۰۶ رو وارد کنیم، چنین تقویمی نشون داده میشه:

January 2006

Su   Mo   Tu   We   Th   Fr   Sa
     1    2    3    4    5    6
7    8    9    10   11   12   13
14   15   16   17   18   19   20
21   22   23   24   25   26   27
28   29   30   31

Press Enter to continue...

که اگه کلید Enter زده بشه تقویم ماه بعدی به نمایش در می یاد.

نکته خیلی مهم: به این برنامه اصلاْ اعتماد نکنید!!! چون ظاهراْ فرمولی که من ازش استفاده کردم غلطه (فرمول رو هم از جناب فوق الذکر گرفتم). مثلاْ اگه سری به تقویم سال ۲۰۰۶ بزنید، می بینید که تقویم January 2006 مثل بالا نیست. البته این برنامه رو می تونیم یک برنامه صرفاْ آموزشی در نظر بگیریم. نکته دیگه اینکه در این برنامه سال های کبیسه رو لحاظ نکردم، چون فرمولشو نداشتم. بعضی فرمولا رو باید به برنامه نویس بدند نه که خوش تولید کنه!

+ نوشته شده در  دوشنبه 1 خرداد1385ساعت 23:47  توسط ارحام عموئی  |