יום רביעי, 8 בפברואר 2017

שפת C - עוד על define ו enum

define מתקדם

כפי שלמדנו כבר, define מגדיר קבוע. לאורך כל התוכנית כשהקבוע יופיע הקומפיילר יתייחס אליו כרצף התווים שבחרנו.

-השם הרשמי להגדרות כאלו הוא "מאקרו" (macro).
-נראה היום שאפשר לעשות פעולות מתקדמות יותר עם define. בדומה לפונקציות:
#include <stdio.h>
#define p(a) printf("%d\n",a)
void main(){
 int x=3,y=8;
 p(x);
 p(y);
}

כאן הגדרנו את p כישות שדומה לקבוע. כל מקום שיש בתוכנית:  (מספר או תווים כלשהם)p
זה יוחלף ל:
printf("%d\n",מספר)



גם תווים:
#include <stdio.h>
#define p(a) printf("%c\n",a+1)
void main(){
 p('e');
 p('E');
}

שפת C - הגדרת טיפוס typedef

הגדרת טיפוס - typedef

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

מבנה כללי:
typedef     שם_חדש     שם ישן ;   


לדוגמה:
p1 ו p2 הם מסוג int בשתי התוכניות הבאות:

#include <stdio.h>
void main(){
 int p1 , p2;
.
.
.
}

//// 
 
#include <stdio.h>
typedef int phone;
void main(){
 phone p1 , p2;
.
.
.
}

יום שלישי, 7 בפברואר 2017

שפת C - חזרה עם גידי

שאלות חזרה על מערכים:


1. קלוט מהמשתמש 6 תווים למערך והדפס אותם בסדר הפוך, תו תחת תו.

2. קלוט סדרת מספרים מהמשתמש, סדר אותם במערך מהקטן לגדול, והדפס מהו התו הגדול והקטן ביותר מבניהם.

3. קלוט מהמשמש מערך דו ממדי של מספרים חיוביים, וענה האם קיבלנו "ריבוע קסם".
ריבוע קסם הוא מערך דו ממדי של X על X מספרים, בו סכום כל השורות שווה. סכום כל העמודות שווה. סכום שני האלכסונים הכי גדולים שווה, וסכום כל שורה שווה לסכום כל עמודה ושווה גם לסכום כל אלכסון.

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

שיעורים Solaris - סיכום מבחן על יוניקס

מבחן יוניקס


יום ראשון, 5 בפברואר 2017

שפת C - קבצים בינארים וקריאה לא סדרתית

קבצים בינארים


כפי שלמדנו בשיעור הקודם, כדי לכתוב/לקרוא מקובץ צריך לפתוח אותו ובסוף גם לסגור אותו:
void main( ) {
FILE fp ;
fp = fopen ("name_of_file","mode") ;
.
.
.
fclose(fp);
}
למדנו בקצרה שעבור קבצים בינארים יש ב mode את האות b.








פעולות בסיסיות על קובץ בינארי:



fwrite( מצביע קובץ , מספר המשתנים , גודל המשתנה בבתים , כתובת המשתנה ממנו מעתיקים )
fwrite( void *p , int size , int num , FILE *fp )                          :ניסוח באנגלית
קולטת מהמשתנה עליו מצביע p , על פי הגודל של size (שהוא הסוג של המשתנה p), כפול num פעמים. (num יהיה 1
עבור משתנה יחיד, או יותר עבור כל איבר שרוצים להעתיק (אם p הוא מערך)) ו"מדפיסה" את כל זה באופן בינארי לקובץ
עליו מצביע fp .