الخميس، 3 يوليو، 2014

third lesson in c++




                                        




الصيغة العامة :
Data type   NameOfArray[Size Of Array]

أولا الDatatype وهو نوع الarray أما ان تكون int ,double,float أى نوع يعنى
ثانيا NameOfArray أسم الarray وزى ما انتوا عارفين اما
ان يكون اى اسم بس اوعى يكون اى أسم محجوز للغة أو built in c++ (راجع الدرس الاول)
ثالثا size of array وهو حجم الarray حيث ان الsize دة لازم يكون ثابت ويكون الcompiler يعرفة فى حالة الcompile أما عن تكون غير ثابتة بمعنى ان المستخدم يحدد حجم الarray فى الrun time
حيث ان الarray أما ان تكون one dimensional or Multi dimensional
أولا الone dimensional array
لاحظ ذلك الكود

#include <iostream>
#include <conio>
void main()
{
 int array[3];
 for(int i=0;i<=3;i++)
  cin>>array[i];
 for(int j=0;j<3;j++)
  cout<<array[j];
 getch();
}
أولا تم تعريف الarray عن طريق جملة
int array[3];

حيث الarray من النوع int واسم المصفوفة array وحجمها 3
يعنى يتم حجز لكل عنصر من عناصر الarray ==< 4 byte

طب علشان اعمل access للمصفوفةرح اعمل loop تمشى على عنصر عنصر من عناصر الarray
وذلك كما موضح فى الكود
for(int i=0;i<=3;i++)
  cin>>array[i];

وأيضا السطر الثانى علشان أبدأ أعمل access لعناصر الarray
فمثلا
array[0]   يدل على العنصر الاول للarray
array[1] يدل على العنصر الثانى فى الarray 
array[2] يدل على العنصر الثالث ف الarray 
وهكذا

for(int j=0;j<3;j++)
  cout<<array[j];

أما ذلك السطرين علشان أطبع عناصر الarray
مثال اخر أخلى الuser يدخل 5 أرقام ويجمعهم ويطبع المتوسط

#include <iostream>
#include <conio>
void main()
{
 const int n=3;
 int array[n];
 int total=0;
 float avg;
 cout<<"enter the elements:\n\n";
 for(int i=1;i<=n;i++)
  {
   cout<<"enter the element num:["<<i<<"]";
    cin>>array[i];
   total+=array[i];
  }
 avg=total/n;
 cout<<"the total is:\t"<<total<<"\n";
 cout<<"the avg is:\t"<<avg<<"\n";
 getch();
}
const int n=3;
 int array[n];
 int total=0;
 float avg;

فى بداية الامر عرفت متغير أسمة n من النوع int وأيضا const يعنى ثابت ماينفعش التغير
ثم عرفت المصفوفة بأسم array والحجم بتاعها هو n
وعرفت متغير total من النوع int واعطيتة قيمة ابتدائية
وأما الavg دة علشان الناتج القسمة وعلشانهيط عملتة من النوع float حتى يقبل الكسور

for(int i=1;i<=n;i++)
  {
   cout<<"enter the element num:["<<i<<"]";
    cin>>array[i];
   total+=array[i];
  }

ثم بعد ذلك خليت الuser يدخل القيم ويضيفها فى الtotal

avg=total/n;
 cout<<"the total is:\t"<<total<<"\n";
 cout<<"the avg is:\t"<<avg<<"\n";


ثم بعد ذلك طبعت قيمة الtotal and avg
طب ملحوظة
فى بداية البرنامج تجد ذلك السطر
const int n=3;
ودة علشان الsize بتاع الarray طب وليه ما كنت كتبت int array[3]
علشان يبقى سهل أغير حجم ال array and limit loop


INITALIZING ARRAY
أى أعطاء قيم ابتدائية للarray

لاحظ ذلك الكود هو عبارة عن أعطاء قيم أبتدائية للarray
وأيضا حساب المضروب لكل عنصر من عناصر الarray
#include <iostream>
#include <conio>
void main()
{
 const int n=5;
 int i,fac,j;
 int array[n]={12,2,5,4,6};
 cout<<"the factorial of array element is:\n\n";
 for(i=0;i<n;i++)
 {
   fac=1;
  cout<<array[i]<<"\t";;
  for( j=array[i];j>0;j--)
  {
   fac*=j;
  }
  cout<<fac<<"\n";
  }
 getch();
}
Num5
const int n=5;
 int i,fac,j;
 int array[n]={12,2,5,4,6};
عرفت متغير const زى ماقولنا ثم عرفت متغير Iوj علشان الelement loop والfac أخزن فية الناتج العملية الحسابية
for(i=0;i<n;i++)
 {
   fac=1;
  cout<<array[i]<<"\t";;
  for( j=array[i];j>0;j--)
  {
   fac*=j;
  }
  cout<<fac<<"\n";
  }
وهاد علشان أجيب المضروب لمتغيرات الarray وهاد برنامج بحث فى الarray عن قيمة محددة ويعطيك الindex بتاع القيمة
#include <iostream>
#include <conio>
void main()
{
 const int n=5;
 int array[n];
 int num,i;
 int found=-1;
 for(i=0;i<5;i++)
 {
  cout<<"enter the  element num ["<<(i+1)<<"]:  ";
  cin>>array[i];
 }

 cout<<"enter the num u wanna 2 search:\t";
  cin>>num;
 for(int j=0;j<n;j++)
  {
    if(num==array[j])
    {
      cout<<"the index is:\t"<<j<<"\n the number is:\t"<<array[j]<<"\n\n";
      found=1;
    }
  }
  if(found==-1)
   cout<<"NOT FOUND\n";
 getch();
}
int found=-1; وهذا المتغير زى الflag مثلا اذا وجد القيمة المحددة يخلى القيمة بتاعتة ب1 واذا لم يجد سيكون قيمتة -1 وبالتالى يطبع خطأ ويخرج من البرنامج
if(num==array[j])
حيث هذا الcondition لمعرفة القيمة التى تساوى القيمة التى ادخلها المستخدم ودة يسمى بsequential access يعنى بيمشى خطوة خطوة على عناصر الarray وهاد برنامج يطبع نجوم كما بالشكل Element value stars *** 3 1 ***** 5 2 ** 2 3 الكود:
#include <iostream>
#include <conio>
void main()
{
 const int n=6;
 int array[n]={12,1,3,4,9,9};
 cout<<"element\tvalue\tstars\n";
 for(int i=0;i<n;i++)
  {
    cout<<"\n"<<i<<"\t"<<array[i]<<"\t";
    for(int j=0;j<array[i];j++)
     cout<<"*";
  }
 getch();
}
MULTI|DIMENSIONAL ARRAYS وهو شبية بالمحددات زى 1 2 3 4 5 6 7 8 9 عبارة عن array صفوفها 3 واعمدتها 3 برضة وتكتب
Data type  Name of array[row][coulm]
يعنى مثال انظر الى ذلك المثال برنامج عبارة عن two dimensional array يدخل الuser القيم ثم بعد ذلك يحسب مجموع كل صف ويخزن مجموع كل صف فى array جديدة وبعد ذلك يطبع الarray الجديدة
#include <iostream>
#include <conio>
void main()
{
 const int n=3;
 int MulArray[n][n];
 int TotalRow[n]={0,0,0};
 int i,j;
 for( i=0;i<n;i++)
 {

  for( j=0;j<n;j++)
   {
     cout<<"enter the element nmu ["<<i<<"]["<<j<<"]: ";
      cin>>MulArray[i][j];
     TotalRow[i]+=MulArray[i][j];
   }
   cout<<"\n";
 }
  cout<<"u have entered:\n\n";
 for( i=0;i<n;i++)
 {
  for( j=0;j<n;j++)
   {
      cout<<"enter the element nmu ["<<i<<"]["<<j<<"]: "<<MulArray[i][j]<<"\n";
   }
  cout<<"\n";
 }
   cout<<"\nthe sum is:\n\n";
  for(i=0;i<n;i++)
   cout<<"the sum of row num: "<<(i+1)<<" is "<<TotalRow[i]<<"\n";
 getch();
}
const int n=3;
 int MulArray[n][n];
أولا السطر الاول حجم الarray زى ما قلت سابقا يبقى متغير علشان يبقى سهل اغير حجم الarray أما السطر الثانى عرفت الarray ونوعها int والarray هنا 3*3 يعنى اكتر من بعد واحد
int TotalRow[n]={0,0,0};
عرفت الarray جديدة اللى هخزن فيها مجموع الصفوف وعملت لها initial
for( i=0;i<n;i++)
 {

  for( j=0;j<n;j++)
   {


     cout<<"enter the element nmu ["<<i<<"]["<<j<<"]: ";
      cin>>MulArray[i][j];
     TotalRow[i]+=MulArray[i][j];
   }
   cout<<"\n";
 }
ودة علشان أخلى الuser يدخل قيم الarray ثم بعد ذلك اخزن تلك القيم فى الtotalRow علشان اجيب مجموع كل صف على حدة
 cout<<"u have entered:\n\n";
 for( i=0;i<n;i++)
 {
  for( j=0;j<n;j++)
   {
      cout<<"enter the element nmu ["<<i<<"]["<<j<<"]: "<<MulArray[i][j]<<"\n";
   }
  cout<<"\n";
 }
علشان اطبع قيم الarray
 cout<<"\nthe sum is:\n\n";
  for(i=0;i<n;i++)
   cout<<"the sum of row num: "<<(i+1)<<" is "<<TotalRow[i]<<"\n
أما ذلك علشان اطبع قيم الtotal row التى تم تخزين النواتج فيها ودة مثال على الmulti dimensional حيث البرنامج عبارة عن المستخدم يدخل مجموعة اسماء ثم بعد ذلك يبحث عن اسم محدد ويطبع لة الindex بتاعة
#include <iostream>
#include <conio>
#include <process.h>
void main()
{
 const int row=5;
 const int n=20;
 char Name[row][n];
 char SName[n];
 int i;
 int found=-1;
 for(i=0;i<row;i++)
  {
    cout<<"enter the name of["<<(i+1)<<"] ";
     cin>>Name[i];
  }
 clrscr();
 cout<<"u have entered :\n\n";
  for(i=0;i<row;i++)
   cout<<Name[i]<<"\t";
  cout<<"\n\nenter the name u wanna 2 search: ";
   cin>>SName;
  for(i=0;i<row;i++)
   {
    if(  ( strcmp( SName,Name[i]  )==0 )  )
     {
       cout<<"the index of the name is: "<<i<<"\n";
       found=1;
     }
   }
  if(found==-1)
   {
     cout<<"SORRY NOT FOUND.......!";
     getch();
     exit(0);
   }

 getch();
}
char Name[row][n];
هنا عرفت array أسمها Name ونوعها char وصفوفها 5 يعنى المستخدم هيدخل خمسة اسماء وn عدد الاعمدة وهو 20 يعنى علشان لو المستخدم حب يدخل اسم كبير حبتين
char SName[n];
ودى الarray اللى هدخل فيها الاسم اللى الuser يحب يبحث عنة
for(i=0;i<row;i++)
  {
    cout<<"enter the name of["<<(i+1)<<"] ";
     cin>>Name[i];
  }
وبذلك الكود اخلى المستخدم يدخل الاسماء اللى نفسة فيهم ثم بعد ذلك اطبعهم اماة عن طريق ذلك الكود
clrscr(); 
 cout<<"u have entered :\n\n";
  for(i=0;i<row;i++)
   cout<<Name[i]<<"\t";

cout<<"\n\nenter the name u wanna 2 search: ";
   cin>>SName;
وهاد علشان الاسم اللى المستخدم يحب يبحث عنة

for(i=0;i<row;i++)
   {
    if(  ( strcmp( SName,Name[i]  )==0 )  )
     {
       cout<<"the index of the name is: "<<i<<"\n";
       found=1;
     }
   }
وهنا الloop علشان امشى على الarray خطوة خطوة وعن طريق دالة تسمى string compare أقارن الاسم اللى المستخدم دخلة بالاسماء الموجودة فى الarray واذا وجدهم يخلى الfound=1 واذا لم يجد يبقى الfound زى ما هوة قيمتة ب-1 وبالتالى يطبع خطأ طب دلوقتى بعد ان تعرفنا عن الarray لاحظ ذلك الكود حيث انة يدخل اسم كبير اى يحتوى على اكتر من كلمة
#include <iostream>
#include <conio>
void main()
{
const int n=60;
char Name[n];
cout<<"enter the name\n";
cin>>Name;
cout<<"u have entered\n"<<Name;
getch();
}
عرفت array of char ثم افرض ان دخلت أسمى مثلا Mohammed allam ماذا سيطبع ??? هيطبع mohammed فقط طب وallam فين تجاهلها علشان الcompiler ما بيعرفش المسافات وبالتالى كلمة allam جاءت بعد مسافة وبالتالى كدة يتجاهلها (compiler وحش :angry: ) طب الحل استخدم دالة
cin.get()
ويتم مباصة لها two parammter هم أسم الarray وحجم الarray يعنى شوف المثال هاد وانت هتفهم
#include <iostream>
#include <conio>
void main()
{
const int n=60;
char Name[n];
cout<<"enter the name\n";
cin.get(Name,n);
cout<<"u have entered\n"<<Name;
getch();
}
طب كدة هيطبع mohammed allam ويبقى كدة مية مية طب لو حبيت يطبع اكتر من سطر سهلة برضة بنفس الدالة هاي ولكن هحط parammter تالت فيدتة أكتب يا user زى ماانت عاوز ولما تحب تخلص دخلى الحرف اللى موجود فى الparammter التالت أنظر الى ذلك الكود وتأمل <_<
#include <iostream>
#include <conio>
void main()
{
const int n=300;
char Name[n];
cout<<"enter the string and if u wanna to exit entred @\n";
cin.get(Name,n,'@');
cout<<"u have entered\n"<<Name;
getch();
}
cin.get(Name,n,'@');
يعنى بقولة أكتب زى ماانت بدي بس اهم اشي ما يزيد عن الحجم اللى انا محددة ليك يا عم المستخدم ولما تزهق خالص دخل علامة ال@ وبكدة يعرف الcompiler أنك أنهيت كتابة طب لو حبيت اعمل copy متغير لاخر عن طريق دالة تسمى ب String copy وهى strcpy() لاحظ ذلك الكود
#include <iostream>
#include <conio>
void main()
{
 const int n=300;
 char Name[n];
 char val[n];
 cout<<"enter the string and if u wanna to exit entred @\n";
  cin.get(Name,n,'@');
 strcpy(val,Name);
 cout<<"u have entered\n"<<val;
 getch();
}
 
 
لا تنسونا من صالح الدعاء 
zero_one_team # 
sammour# 

مواضيع ذات صلة

third lesson in c++
4 / 5
Oleh