יום רביעי, 16 בנובמבר 2016

שפת C - שאלות ותשובות מערכים חד ממדיים ודו ממדיים, ופונקציות (יום רביעי)

מערכים חד ממדיים - שאלות (06/11/2016)









פתרונות (09/11/2016)


/*
////////////// Exe No' 1
#include <stdio.h>
#define N 5
void main() {
 int A[N] , i , max, min;
 printf("Enter %d numbers: ",N);
 for(i=0; i<N; i++)
  scanf("%d",&A[i]);
 
 max = min = A[0];
 for(i=0; i<N; i++) {
  if(A[i] > max)
   max = A[i];
  if(A[i] < min)
   min = A[i];
 }
 
 printf("Max: %d  Min: %d   Diff: %d\n",max , min , max - min);
}
 
 
////////////// Exe No' 2
#include <stdio.h>
#define N 5
void main() {
 int A[N] , B[N] , i , j;
 for(i=0; i<N; i++) {
  printf("A[%d] ==> ",i);
  scanf("%d",&A[i]);
 }
 for(i=0; i<N; i++) {
  printf("B[%d] ==> ",i);
  scanf("%d",&B[i]);
 }
 
 for(i=j=0;i+j < N; ) {
  if(A[i] < B[j])
   printf("%d ",A[i++]);
  else
   printf("%d ",B[j++]);
 }
 putchar('\n');
}
*/
 
 
// Matrix ..
#include <stdio.h>
#define N 4
#define M 3
void main() {
 int A[N][M] , i , j, S1 = 0 , S2;
 
 printf("Enter %d numbers:\n",N*M);
 for(i=0; i<N ; i++) {
  for(j=0; j<M; j++)
   scanf("%d",&A[i][j]);
 }
 
 putchar('\n');
 for(i=0; i<N ; i++) {
  for(j=0; j<M; j++)
   printf("%4d ",A[i][j]);
  putchar('\n');
 }
 
 putchar('\n');
 for(i=0; i<N; i++) {
  S2 = 0;
  for(j=0; j<M; j++)
   S2 += A[i][j];
  S1 += S2;
  printf("Sum Line %d => %d\n",i , S2);
 }
 printf("Sum Matrix: %d\n",S1);
 
 
 putchar('\n');
 for(i=0; i<M; i++) {
  S2 = 0;
  for(j=0; j<N; j++)
   S2 += A[j][i];
  printf("Sum Column %d => %d\n",i , S2);
 }
}






מערכים דו ממדיים

-כל הכללים של מערכים רגילים, אבל כאן כל איבר במערך מוגדר ע"י שני ערכים (ולא אחד). מכיוון שזה אותו האופן בו מגדירים מקומת בטבלה דו ממדית - קוראים למערכים אלו "דו ממדיים"

הגדרה כללית:

   type Name[row[col];

כלומר:     ;[כמות עמודות][כמות השורות]שם המערך     סוג איברי המערך



קלט מהמשתמש של טבלה של 5 שורות ו3 עמודות:
int A[5[3], i , j ;                 
for ( i=0 ; i<5; i++)    
{
     for ( j=0 ; j<3; j++)    
           scanf ( "%d",&A[i][j] );
}




אתחול מערך דו ממדי בשורת הפקודה:
int A[4] [3]  = { {10,20,30}  =>  [10,20,30]
                              {5 , 5  , 5  }  =>  [ 5 , 5 , 5  ]
                              {19}   }         =>  [19 , 0 ,0 ]
                                                    =>  [ 0 , 0 , 0]








משימות (09/11/2016)

מחשבים א'.
מערכים  דו  ממדיים.

1) כתוב תכנית אשר מכילה מטריצה.
    התוכנית קולטת איברי המטריצה ומדפיסה ממוצע כל שורה בנפרד.


2) כתוב תכנית בה מוגדרת מטריצה.
     התוכנית תדפיס את סכום השורה המכסימלי, וגם הסכום של העמודה
    המינימאלי.


3) כתוב תכנית אשר מכילה מטריצה בגודל NxN של מספרים ממשיים.
    התוכנית בודקת אם המטריצה סימטרית ביחס לאלכסון שבין הפינה השמאלית
    העליונה ובין הפינה הימנית התחתונה.(האלכסון הראשי)

     לדוגמא, המטריצה באה היא כן סימטרית

                            7  4   3  8
                                                        6  5   1  3
                                                        2  7  5   4
                                                        4  2  6   7



4) ריבוע הקסם הוא ריבוע בו סכום המספרים שווה בכל שורה , עמודה  ואלכסון.
     לדוגמא:
                       6   1   8
                                                    7   5   3
                                                    2   9   4







פתרונות (16/11/2016 = היום)

/*
///////////////////// Exe' No' 3
#include <stdio.h>
#define N 4
void main() {
 int A[N][N] = { {15,10,20,30} ,
     {10,33,18,-5} , 
     {20,18,44,86} , 
     {30,-5,86,47} } , i,  j , flag = 1;
 
// printf("Enter %d numbers:\n",N*N);
// for(i=0; i<N; i++) {
//  for(j=0; j<N; j++)
//   scanf("%d",&A[i][j]);
// }
 
 
 for(i=0; i<N; i++) {
  for(j=i+1; j<N; j++)
   if(A[i][j] != A[j][i])
    flag = 0;
 }
 
 if( flag != 0)
  printf("Yes\n");
 else
  printf("No\n");
}
*/
 
 
 
///////////////////// Exe' No' 4
#include <stdio.h>
#define N 3
void main() {
 int A[N][N] = { {8,1,6},
     {3,5,7},
     {4,9,2} } , i,  j , flag = 1, S1=0 , S2=0;
 
 for(i=0; i<N; i++) {
  S1 += A[i][i];
  S2 += A[i][N-i-1];
 }
 if(S1 != S2)
  flag = 0;
 
 for(i=0; i<N && flag; i++) {
  S2 = 0;
  for(j=0; j<N; j++)
   S2 += A[i][j];
  if(S1 != S2) flag = 0;
 
  S2 = 0;
  for(j=0; j<N; j++)
   S2 += A[j][i];
  if(S1 != S2) flag = 0;
 }
 
 
 if( flag != 0)
  printf("Yes\n");
 else
  printf("No\n");
}



                     :התנאי
if (flag != 0)
                     :זהה לתנאי
if (flag)





פונקציות

- הפונקציה היא קטע קוד שנרשם מחוץ ל main שהתפקיד שלו לבצע משימה כלשהי.
- הפונקציה יכולה לקבל כמה שרוצים ארגומנטים (ערכים), אבל להחזיר לכל היותר ערך אחד.

הגדרה כללית:

   type fName (type1  n1 , type2  n2, ...) {
.                                                              
.                                                              
.                                                              
}                                                                   

כלומר:
} (...השם והסוג של ארגומנט 2 , השם והסוג של ארגומנט 1) שם הפונקציה     סוג הערך המוחזר 
.                                                                                                                         
.     גוף הפונקציה                                                                                                 
.                                                                                                                         
}                                                                                                                                  


- המשתנים (הפרמטרים) שהפונקציה מקבלת, והמשתנים המוגדרים בתוכה הם משתנים פנימיים שניתן להשתמש בהם אך
   ורק בתחום של הפונקציה.
- פונקציה אחת לא יכולה להשתמש במשתנים של פונקציה אחרת!



return
- התפקיד שלה להחזיר ערך מהפונקציה.
- return מפסיקה עבודת הפונקציה.
- היא יכולה להחזיר (דוגמאות):
return 1;      קבוע     
  return x;    משתנה    
return (a+b)*z;      ביטוי     







דוגמה לפונקציה (מהשיעור):

#include <stdio.h>
double f(int a, int b, int c) {
 int sum;
 sum = a + b + c;
 return sum / 3.0;
}
void main(  ) {
 int x , y , z;
 double t;
 printf("Enter 3 numbers:\n");
 scanf("%d %d %d",&x , &y, &z);
 
 t = f(x, y, z);
 printf("Average: %.2f\n",t);
 
 
 printf("Average: %.2f\n", f(x, y, z) );
 
 printf("Average: %.2f\n", f(x+y, z , 100) );
 
}






משימות (היום)

מחשבים א'
פונקציות.

1)כתוב הפונקציה:
    int mul (int a, int b)
    אשר מקבלת שני מספרים שלמים ומבצעת ביניהם פעולת כפל על ידי שימוש
    בפעולת חיבור וחיסור בלבד ומחזירה התוצאה.

2) כתוב תוכנית אשר תקלוט רדיוס של מעגל ותמצא ההיקף והשטח שלו.
    עבור כל פעולה תוגדר פונקציה מתאימה.

3)  כתוב פונקציה אשר מקבלת מספר שלם n , הפונקציה תחזיר סכום המספרים 
     השלמים בין 1 עד n.
     לדוגמא עבור n = 5 , הפונקציה תחזיר 15.

4) כתוב פונקציה אשר מקבלת שני מספרים שלמים, a ו b.
    הפונקציה תחזיר ממוצע המספרים הזוגיים בתחום בין a עד b.
   לדוגמא:   עבור a = 2  ,  b = 7    
                    הפונקציה תחזיר 4.

5) כתוב פונקציה אשר תקבל מספר ותחזיר את סכום הספרות של המספר.
    לדוגמא:   עבור המספר 2309
                     הפונקציה תחזיר 14













בהצלחה!









אין תגובות:

הוסף רשומת תגובה