PASCAL PROGRAMLAMA DİLİ

İkinci Ara Sınav

1. Soru :

Kullanıcının gireceği iki tarih arasında kaç gün olduğunu bulan bir Pascal programını, aşağıda belirtilenlere uygun olarak yazınız:

  1. Tarih girişlerini ay gün ( aa gg) sırasıyla alan bir procedür yazınız.
  2. Girilen tarihin geçerli olup olmadığını denetleyen, geçersiz olduğunda kullanıcıya "Yanlış tarih girdiniz!" mesajı vererek giriş işlemini sürekli tekrarlayan bir procedure yazınız.
  3. Tarihler doğru girildiğinde, aradaki gün farkını hesaplayan bir procedure veya fonksiyon yazınız.
  4. Bulunan gün farkını ekrana yazdırınız.
Program GunSay (Input, Output);
{ Bu program aynı yıl içindeki iki tarih arasında
  kaç gün olduğunu hesaplar }

uses WinCrt;
const
     DatePrompt1 = ' aa gg biçeminde ilk tarihi giriniz : ';
     DatePrompt2 = ' aa gg biçeminde ikinci tarihi giriniz : ';
var
     Month1, Day1, Month2, Day2,    {Input değişkenleri}
     JulianDate1, JulianDate2,      {Hesaplanan değişkenler}
     Difference                     {Output değişkenleri}
         : Integer;
     ValidDate1, ValidDate2         {Denetim Değişkenleri}
         : Boolean;
{**********************************************************************}
     procedure ValidateMonth (Month : Integer;
                          var ValidMonth : Boolean);
     { Girilen ayın geçerliliğini denetler }

     begin   {ValidateMonth}
          ValidMonth := (Month >= 1) and (Month <= 12);
          if not ValidMonth then
             Writeln ('Geçersiz ay : ', Month)
     end;    {ValidateMonth}
{----------------------------------------------------------------------}
     procedure ValidateDay (Month, Day : Integer;
                        var ValidDay : Boolean);
     { Girilen günün geçerliliğini denetler }
     var
          NumberDays : Integer;
     begin  {ValidateDay}
          case Month of
               2                : NumberDays := 28;
               4,6,9,11         : NumberDays := 30;
               1,3,5,7,8,10,12  : NumberDays := 31
          end;   {case}
          ValidDay := (Day >= 1) and (Day <= NumberDays);
          if not ValidDay then
             Writeln ('Geçersiz Gün : ', Day)
     end;  {ValidateDay}
{-----------------------------------------------------------------------}
     procedure ComputeJulianDate (CalendarMonth,
                                  CalendarDay : Integer;
                              var ValidDate   : Boolean;
                              var JulianDate  : Integer);
     { Yılbaşından itibaren ay başına kadar kaç gün geçtiğini hesaplar.
       Buna "Julian Gün" denilir.  }
     begin   {ComputeJulianDate}
          ValidateMonth (CalendarMonth, ValidDate);
          if ValidDate then
             ValidateDay (CalendarMonth, CalendarDay, ValidDate);
          if ValidDate then
             begin
                  case CalendarMonth of
                        1  : JulianDate := 0;
                        2  : JulianDate := 31;
                        3  : JulianDate := 59;
                        4  : JulianDate := 90;
                        5  : JulianDate := 120;
                        6  : JulianDate := 151;
                        7  : JulianDate := 181;
                        8  : JulianDate := 212;
                        9  : JulianDate := 243;
                        10 : JulianDate := 273;
                        11 : JulianDate := 304;
                        12 : JulianDate := 334
                   end;  {case}
                   JulianDate := JulianDate + CalendarDay ;
              end  {if}
     end;  {ComputeJulianDate}
{----------------------------------------------------------------------}
     procedure Wait;
     begin  {Wait}
          Write ('Devam için  tuşuna basınız');
          Readln
     end;   {Wait}
{**********************************************************************}
BEGIN {Ana Program}
ClrScr;
{1.0 Tarihlerin girişi }

     ClrScr;
     Write (DatePrompt1);
     Readln (Month1, Day1);
     Write (DatePrompt2);
     Readln (Month2, Day2);

{2.0 Girilen tarihlerin yılbaşından itibaren kaçıncı gün
     olduğunu hesaplar "Julian Gün" }

     Writeln;
     ComputeJulianDate (Month1, Day1, ValidDate1 ,JulianDate1);
     Write ('İlk Tarih  : Ay = ',Month1,' Gün = ',Day1);
     if ValidDate1 then
        Writeln(' Julian Gün 1 = ', JulianDate1)
     else
        Writeln;
     ComputeJulianDate (Month2, Day2, ValidDate2, JulianDate2);
     Write ('İkinci Tarih  : Ay = ',Month2,' Gün = ',Day2);
     if ValidDate2 then
        Writeln(' Julian Gün 2 = ', JulianDate2)
     else
        Writeln;

{3.0 Julian Günler arasındaki farkı bulur ve yazar }

     if ValidDate1 and ValidDate2 then
        begin
             Difference := JulianDate2 - JulianDate1;
             WriteLn;
             Writeln ('Tarihler arasındaki fark : ', Difference)
        end
     else
        Writeln ('Girilen tarihler geçersiz olduğundan hesap yapılmadı');

{4.0 Wait}

     Wait

END.  {Ana Program}

2. Soru :

Kullanıcının istediği bir sayıya kadar olan ve 3 ile tam bölünebilen sayıları toplayan bir Pascal programı yazınız.

Program Soru02;
uses WinCrt;
Var
	ustsayi,i,toplam	: Integer;
Begin 
	WriteLn( 'Hangi sayıya kadar 3 ile bölünebilenleri toplayacaksınız? ');
	Read(Ustsayi);	
	Toplam:=0;
	For i:=1 to Ustsayi do
	
		If i mod 3 = 0 then	
			Toplam := Toplam+i;

	writeln(Toplam)
End.