הצעה לפתרון מלא — אלקטרוניקה ומחשבים
בגרות · קיץ תשע"ח 2018 · שאלון 815381 · שאלות 1–22
✦ בנוי על ידי פהד גאנם ✦
💡
על המסמך: הצעה לפתרון מלא לשאלון 815381 — אלקטרוניקה ומחשבים, קיץ תשע"ח 2018. השאלון בנוי משני חלקים. חלק א' (לפי תוכנית הלימודים החדשה): פרק ראשון — תורת החשמל (1–2, עונים על אחת), פרק שני — אלקטרוניקה תקבילית וספרתית (3–5, עונים על שתיים), פרק שלישי — תכנות בשפת C# (6–8, עונים על שתיים). חלק ב' (לפי תוכנית הלימודים הישנה): פרק רביעי (9–12), פרק חמישי (13–14) ופרק שישי — מבוא להנדסת מחשבים, תכנות בשפות C ו-Arduino (15–22). שימו לב: חלק ב' חוזר על שאלות החשמל והאלקטרוניקה של חלק א' — שאלה 9=3, 10=4, 12=5, 13=1, 14=2 — למעט שאלה 11 (ממיר A/D) שהיא חדשה. כאן פתורות כל השאלות, לנוחות הלימוד.
🔌 חלק א' · פרק ראשון — תורת החשמל
שאלה 1 — מעגל עם ארבעה מדי-זרם ומקור מתח
נתונים: E = 200V · A₁ = 20A · A₂ = 5A · A₃ = 2.5A · A₄ = 2.5A
💡
מבנה המעגל: כל ארבעת הנגדים R₁–R₄ מחוברים במקביל אל מקור המתח E. מד-הזרם A₁ מודד את זרם המקור הכולל, A₂ את הזרם דרך R₂, A₃ את הזרם דרך R₃ ו-A₄ את הזרם דרך R₄. כל נגד נמצא תחת אותו מתח E = 200V.
סעיף א — ההתנגדות השקולה RT

A₁ מודד את הזרם הכולל שהמקור מספק. לפי חוק אוהם על כל המעגל:

RT = EA₁ = 20020
RT = 10 Ω
סעיף ב — הזרם דרך R₁

לפי חוק הזרמים של קירכהוף בצומת העליון, הזרם הכולל מתחלק בין ארבעת הנגדים:

I(R₁) = A₁ - A₂ - A₃ - A₄ = 20 - 5 - 2.5 - 2.5
I(R₁) = 10 A
סעיף ג — ההתנגדות של כל אחד מהנגדים

על כל נגד יש את אותו מתח מקור E = 200V, ולכן:

R₁ = 20010 = 20 Ω    R₂ = 2005 = 40 Ω
R₃ = 2002.5 = 80 Ω    R₄ = 2002.5 = 80 Ω
R₁ = 20 Ω ; R₂ = 40 Ω ; R₃ = 80 Ω ; R₄ = 80 Ω
סעיף ד — מאזן ההספקים

נחשב את ההספק שמספק המקור ואת סכום ההספקים על הנגדים:

Pמקור = E · A₁ = 200 × 20 = 4000 W
ΣPנגדים = 200×10 + 200×5 + 200×2.5 + 200×2.5
= 2000 + 1000 + 500 + 500 = 4000 W
סכום ההספקים על הנגדים = 4000 W = Pמקור
שאלה 2 — מעגל RC טורי במשקף-תנודות
נתונים: R = 1 kΩ · Time/div = 0.1 msec · Volt/div = 5 V
💡
קריאת המסך: ערוץ CH₁ (העקום העבה) מודד את מתח-המקור U, וערוץ CH₂ (העקום הדק) מודד את המתח על הנגד R. מספירת המשבצות: CH₁ בעל משרעת של 2 משבצות, CH₂ בעל משרעת של משבצת אחת, וזמן-המחזור שווה ל-2 משבצות אופקיות.
סעיף א — קריאה מהמסך
1) Umax = 2 div × 5 V/div = 10 V
2) T = 2 div × 0.1 msec/div = 0.2 msec
3) UR(max) = 1 div × 5 V/div = 5 V
Umax = 10 V ; T = 0.2 msec ; UR(max) = 5 V
סעיף ב — הערך היעיל של המקור והתדר
Ueff = Umax2 = 101.414 = 7.07 V
f = 1T = 10.2×10-3 = 5000 Hz
Ueff ≈ 7.07 V ; f = 5 kHz
סעיף ג — הערך היעיל של הזרם I

בחיבור טורי הזרם משותף לכל הרכיבים. נחשב אותו ממתח הנגד (הערך היעיל):

UR(eff) = 52 = 3.54 V
I = UR(eff)R = 3.541000 = 3.54 mA
I ≈ 3.54 mA (יעיל)
סעיף ד — עכבת המעגל Z
Z = UeffI = 7.073.54×10-3 = 2000 Ω

בדיקה: XC = √(Z² − R²) = √(2000² − 1000²) ≈ 1732 Ω, ומכאן √(UR² + UC²) = √(5² + 8.66²) = 10V = Umax

Z = 2 kΩ
⚙️ חלק א' · פרק שני — אלקטרוניקה תקבילית וספרתית
שאלה 3 — משווים עם LDR ושתי נוריות LED
נתונים: VCC=6V · R₁=10kΩ · R₂=20kΩ · R₃=5kΩ · R₄=5kΩ · R₅=R₆=1kΩ
💡
מבנה המעגל: ה-LDR עם R₁ יוצרים מחלק מתח שנותן את מתח הצומת C. שני המגברים משמשים כמשווים: מתח C מחובר לכניסה החיובית של שני המשווים. R₂–R₃–R₄ הם מחלק מתח קבוע שנותן את הייחוסים A (לכניסה השלילית של המשווה העליון, LED1) ו-B (לכניסה השלילית של המשווה התחתון, LED2). נורית נדלקת כאשר VC עולה מעל מתח הייחוס שלה.
סעיף א — המתח בנקודות A ו-B

A ו-B נקבעים ממחלק המתח R₂–R₃–R₄ שבין 6V לאדמה:

VA = 6 · R₃ + R₄R₂ + R₃ + R₄ = 6 · 1030 = 2 V
VB = 6 · R₄R₂ + R₃ + R₄ = 6 · 530 = 1 V
VA = 2 V ; VB = 1 V
סעיף ב — תחום המתח ב-C שבו שתי הנוריות דולקות

LED1 נדלקת כאשר VC > VA = 2V, ו-LED2 נדלקת כאשר VC > VB = 1V. שתיהן דולקות יחד רק כאשר מתקיים התנאי החזק יותר:

2 V < VC < 6 V   (שתי הנוריות דולקות)
סעיף ג — תחום ההארה (lux) שבו LED2 דולקת ו-LED1 כבויה

מצב זה מתקיים כאשר 1V < VC < 2V. נמצא את התנגדות ה-LDR בגבולות התחום מתוך מחלק המתח VC = 6·R₁/(LDR+R₁):

VC = 1V  →  LDR = 6·101 - 10 = 50 kΩ
VC = 2V  →  LDR = 6·102 - 10 = 20 kΩ

מהגרף (איור ב'): התנגדות 50kΩ מתקבלת בעוצמת הארה של כ-3 lux, והתנגדות 20kΩ בכ-6 lux. הארה חזקה יותר מקטינה את ההתנגדות, ולכן:

3 lux < עוצמת ההארה < 6 lux
סעיף ד — האם ייתכן ש-LED1 דולקת ו-LED2 כבויה?

כדי ש-LED1 תדלוק דרוש VC > 2V, וכדי ש-LED2 תכבה דרוש VC < 1V. שני התנאים סותרים זה את זה. מכיוון שסף ההדלקה של LED1 (2V) גבוה מזה של LED2 (1V), בכל פעם ש-LED1 דולקת בהכרח גם LED2 דולקת.

לא ייתכן — אין מצב כזה
שאלה 4 — מגבר טרנזיסטור במוצא משותף (CE)
נתונים: VBE=0.7V · hie=1kΩ · β=hfe · מגרף המוצא: Q ב-IC=3mA, VCE=3V, IB=15µA
סעיף א — VCC וההתנגדות RC

קו העבודה חותך את ציר VCE ב-12V (שם IC=0), ולכן VCC = 12V. הקו חותך את ציר IC ב-4mA (שם VCE=0), ומכאן:

RC = VCCIC(max) = 124×10-3
VCC = 12 V ; RC = 3 kΩ
סעיף ב — מקדם ההגבר β

בנקודת העבודה Q נתונים IC=3mA ו-IB=15µA:

β = ICIB = 3×10-315×10-6
β = 200
סעיף ג — הגבר המתח AV

בזרם חילופין הקבלים מקצרים, והעומס במוצא הוא RC בלבד (אין נגד עומס חיצוני):

AV = VoVin = - β · RChie = - 200 × 30001000
AV = -600 (מהפך, |AV| = 600)
סעיף ד — מצב הטרנזיסטור על עקום IB4=20µA

בנקודה Q הטרנזיסטור נמצא במצב פעיל (הגברה ליניארית). אילו נקודת העבודה הייתה על עקום IB4=20µA, הזרם הדרוש היה IC = β·IB4 = 200×20µ = 4mA — ערך השווה לזרם המרבי של קו העבודה (VCE≈0). לכן הטרנזיסטור היה נכנס לרוויה.

ב-Q: פעיל  ·  על IB4: רוויה
שאלה 5 — שני מגברי שרת בטור (מפחית ומהפך)
נתונים: V₁=2V · V₂=3V · R₁=5kΩ · R₂=10kΩ · R₃=10kΩ · R₄=20kΩ · R₅=10kΩ · R₆=20kΩ
💡
מבנה המעגל: המגבר הראשון בחיבור לא-מהפך (כניסה + אל V₁ דרך שרשרת). המגבר השני בחיבור מהפך-מסכם, כשכניסתו החיובית מוזנת ממחלק המתח R₅–R₆ שעל V₂.
סעיף א — המתח בנקודות A ו-B

בכניסות המגברים האידיאליים מתקיים "קצר וירטואלי" — מתח הכניסה השלילית שווה למתח הכניסה החיובית:

VA = V₁ = 2 V
VB = V₂ · R₆R₅ + R₆ = 3 · 2030 = 2 V
VA = 2 V ; VB = 2 V
סעיף ב — המתח במוצא המגבר הראשון Vo1

חיבור לא-מהפך עם הגבר 1 + R₂/R₁. הזרם דרך R₁ (מ-A לאדמה) שווה לזרם דרך R₂:

Vo1 = V₁ (1 + R₂R₁) = 2 (1 + 105) = 2 × 3
Vo1 = 6 V
סעיף ג — מתח-המוצא Vo

חוק הזרמים בצומת B (VB=2V, אין זרם לכניסת המגבר):

Vo1 - VBR₃ + Vo - VBR₄ = 0
6 - 210 + Vo - 220 = 0 → Vo - 2 = -8
Vo = -6 V
סעיף ד — מתח-המוצא לאחר ניתוק R₄

ללא R₄ אין משוב, והמגבר השני הופך למשווה. אין זרם דרך R₃, ולכן VB = Vo1 = 6V. מאחר ש-V=6 > V+=2, המוצא נצמד לרוויה השלילית:

Vo = -12 V
💻 חלק א' · פרק שלישי — תכנות בשפת C# (שאלות 6–8)
שאלה 6 (C#) — הפעולה IsTwoDigits והספרה הגדולה
הפעולה: IsTwoDigits מחזירה true אם המספר דו-ספרתי, אחרת false
סעיף א — מעקב אחר קטע הקוד עבור הקלט 71

המספר 71 דו-ספרתי, ולכן IsTwoDigits(71)=true ונכנסים לגוף ה-if. מחשבים את ספרת האחדות y ואת ספרת העשרות z, ומדפיסים את הגדולה מביניהן:

x = 71 → IsTwoDigits(71) = true y = 71 % 10 = 1 (ספרת האחדות) z = 71 / 10 = 7 (ספרת העשרות) if (y > z) → 1 > 7 = false → else: Console.WriteLine(z)
xyzפלט
71177
7
סעיף ב — דוגמה שפלטה "Bad number!"

כל מספר שאינו דו-ספרתי גורם ל-IsTwoDigits להחזיר false, ולכן מודפסת ההודעה. למשל מספר חד-ספרתי או תלת-ספרתי:

x = 5 // חד-ספרתי → Bad number! x = 123 // תלת-ספרתי → Bad number!
סעיף ג — מה מבצע קטע הקוד

הקוד קולט מספר שלם. אם הוא דו-ספרתי — מדפיס את הספרה הגדולה מבין שתי ספרותיו (האחדות מול העשרות; בשוויון מדפיס את ספרת העשרות). אם אינו דו-ספרתי — מדפיס "Bad number!".

סעיף ד — מימוש הפעולה IsTwoDigits
public static bool IsTwoDigits(int num) { return num >= 10 && num <= 99; }
שאלה 7 (C#) — מכונת מכירת סוללות אוטומטית
נתונים: מחיר סוללה = 2.5 ₪ · כל קונה רוכש 1–10 סוללות · הקליטה נעצרת כשנותרו במכונה פחות מ-10

התוכנית קולטת את כמות הסוללות ההתחלתית במכונה, ואז בלולאה קולטת לכל קונה את הכמות המבוקשת, מציגה את המחיר, מפחיתה מהמלאי וסופרת. הקליטה מסתיימת כשהמלאי יורד אל מתחת ל-10. בסיום מוצגים מספר הקונים והסכום הכולל:

const double PRICE = 2.5; int stock = int.Parse(Console.ReadLine()); // מלאי התחלתי במכונה Console.WriteLine("Batteries in machine: " + stock); int customers = 0; double revenue = 0; while (stock >= 10) // עוד יש לפחות 10 סוללות { int qty = int.Parse(Console.ReadLine()); // כמות מבוקשת 1..10 double toPay = qty * PRICE; Console.WriteLine("Pay: " + toPay); stock = stock - qty; // עדכון המלאי customers++; // ספירת קונה revenue = revenue + toPay; // צבירת ההכנסה } Console.WriteLine("Customers: " + customers); Console.WriteLine("Total revenue: " + revenue);
💡
ההנחה בשאלה: הקלט תקין (כל כמות בין 1 ל-10). התנאי stock >= 10 נבדק לפני כל קונה, ולכן ברגע שהמלאי יורד מתחת ל-10 הלולאה נעצרת.
שאלה 8 (C#) — המחלקה TrafficLight
המחלקה: רמזור עם שלוש תכונות בוליאניות (redLight, yellowLight, greenLight)
סעיף א — הפלט של קטע הקוד

שני הרמזורים נוצרים באדום (הבנאי). t1 מועבר לצהוב. בכל סיבוב נבדק אם שני הרמזורים באותו צבע:

t1 = new TrafficLight() → red=T, yellow=F, green=F t2 = new TrafficLight() → red=T, yellow=F, green=F t1.SetYellowLight() → t1: red=F, yellow=T, green=F (t2 עדיין אדום) i=0: אדום&אדום? F&T=F | צהוב&צהוב? T&F=F | ירוק&ירוק? F&F=F → "Error" t1.SetGreenLight(); t2.SetGreenLight() → שניהם ירוקים i=1: אדום&אדום? F | צהוב&צהוב? F | ירוק&ירוק? T&T=T → "Go"
Error Go
סעיף ב1 — הגדרת רמזור נוסף t3
TrafficLight t3 = new TrafficLight();
סעיף ב2 — זיהוי צבע הרמזור t3 והדפסת הודעה
if (t3.GetRedLight()) Console.WriteLine("Red"); else if (t3.GetYellowLight()) Console.WriteLine("Yellow"); else if (t3.GetGreenLight()) Console.WriteLine("Green");
סעיף ג — האם ייתכן עצם עם שתי תכונות true בו-זמנית?

לא ייתכן מבלי לשנות את קוד המחלקה. הבנאי מדליק רק את redLight, וכל אחת מהפעולות Set מדליקה תכונה אחת בלבד ומכבה את השתיים האחרות. התכונות פרטיות (private), ואין דרך דרך הממשק הנתון להציב שתי תכונות ל-true בו-זמנית. זהו מבנה נכון, שכן ברמזור אמיתי לעולם לא נדלקות שתי נוריות יחד.

📜 חלק ב' — מיועד לנבחני תוכנית הלימודים הישנה
🔁
הערה על חלק ב': פרק רביעי (9–12) ופרק חמישי (13–14) חוזרים על שאלות החשמל והאלקטרוניקה של חלק א' — שאלה 9 זהה ל-3, 10 זהה ל-4, 12 זהה ל-5, 13 זהה ל-1, 14 זהה ל-2. ראו את הפתרונות המלאים לעיל. השאלה החדשה היחידה בפרקים אלה היא שאלה 11 (ממיר A/D), הפתורה כאן במלואה. פרק שישי (15–22) הוא פרק תכנות בשפות C ו-Arduino ופתור אף הוא במלואו.
🔧 חלק ב' · פרק רביעי — מבוא להנדסת אלקטרוניקה (9–12)
שאלות 9, 10, 12 — זהות לשאלות 3, 4, 5
שאלה בחלק ב'זהה לשאלהנושאתשובות עיקריות
93משווים עם LDRVA=2V, VB=1V ; 3–6 lux ; אין מצב LED1 בלבד
104מגבר CERC=3kΩ, β=200, AV=−600, רוויה ב-IB4
125מגברי שרתVA=VB=2V, Vo1=6V, Vo=−6V, ואחרי ניתוק R₄: −12V

הפתרונות המלאים והמנומקים מופיעים בפרק השני של חלק א' (שאלות 3, 4, 5).

שאלה 11 — ממיר אנלוגי-לספרתי (A/D) בעל 8 סיביות
נתונים: ממיר A/D בעל 8 סיביות · Vi=0V ⇒ 0 · Vi=2V ⇒ 01100100₍₂₎
סעיף א — כושר ההבחנה (הרזולוציה)

המילה הבינארית עבור 2V היא 01100100₍₂₎ = 100 (בעשרוני). הרזולוציה = המתח לכל "צעד" ספרתי:

01100100₍₂₎ = 64 + 32 + 4 = 100
Resolution = 2000 mV100 = 20 mV
כושר ההבחנה = 20 mV לצעד
סעיף ב — המילה הבינארית עבור מתחי המבוא
1) Vi = 200 mV → 20020 = 10 → 00001010₍₂₎
2) Vi = 5.1 V = 5100 mV → 510020 = 255 → 11111111₍₂₎
200 mV → 00001010₍₂₎  ;  5.1 V → 11111111₍₂₎
סעיף ג — מתח המבוא עבור המילה 10101001₍₂₎
10101001₍₂₎ = 128 + 32 + 8 + 1 = 169
Vi = 169 × 20 mV = 3380 mV
Vi = 3.38 V
⚡ חלק ב' · פרק חמישי — תורת החשמל (13–14)
שאלות 13, 14 — זהות לשאלות 1, 2
שאלה בחלק ב'זהה לשאלהנושאתשובות עיקריות
131ארבעה מדי-זרםRT=10Ω, I(R₁)=10A, R=20/40/80/80Ω, ΣP=4000W
142RC במשקף-תנודותUmax=10V, T=0.2ms, f=5kHz, I≈3.54mA, Z=2kΩ

הפתרונות המלאים מופיעים בפרק הראשון של חלק א' (שאלות 1, 2).

🖥️ חלק ב' · פרק שישי — מבוא להנדסת מחשבים (תכנות C / Arduino, שאלות 15–22)
שאלה 15 (C) — המרת שעה למספר דקות מתחילת היממה
הקלט: מספר שלם בפורמט HHMM · הפלט: c = מספר הדקות שחלפו מתחילת היום
סעיף א — הסבר השורות 7, 8, 9
7: a = time / 100; // חלוקה שלמה → מפרידה את השעות (HH) 8: b = time % 100; // שארית → מפרידה את הדקות (MM) 9: c = (a * 60) + b; // המרה למספר דקות כולל מתחילת היממה
סעיף ב — הפלט עבור כל אחד מהקלטים
timea=time/100b=time%100c=a·60+b
0000
3703737
817817497
225922591379
c=0 c=37 c=497 c=1379
סעיף ג — תוספת: כמה דקות נותרו עד חצות הלילה

היממה כולה מונה 24 × 60 = 1440 דקות. מספר הדקות שנותרו מהשעה הנוכחית עד חצות:

int rem; rem = 1440 - c; printf("rem=%d", rem);
💡
דוגמאות: עבור 22:59 (c=1379) נותרו 61 דקות ; עבור 08:17 (c=497) נותרו 943 דקות.
שאלה 16 (C) — מפתח-קלט (300H), מפתח-פלט (301H) ונורית LED
חומרה: 8 מפסקים S₀–S₇ במבוא 300H · נורית LED על D₀ של מפתח-הפלט 301H
סעיף א — הסבר השורות 4, 5, 8, 9
4: dataIN = Inp32(0x300); // קריאת מצב 8 המפסקים ממפתח-הקלט 300H 5: dataIN = dataIN & 0x03; // מיסוך: משאיר רק 2 הביטים התחתונים (D0,D1) 8: Out32(0x301, 1); // כתיבת 1 למפתח-הפלט → הדלקת הנורית LED 9: Sleep(dataIN * 50); // השהיה של dataIN×50 מילישניות (זמן הדלקה)
סעיף ב — אילו מפסקים משפיעים על פעולת המעגל

בגלל המיסוך & 0x03 נשמרים רק הביטים D₀ ו-D₁, ולכן רק המפסקים S₀ ו-S₁ משפיעים. S₂–S₇ אינם משנים דבר.

משפיעים רק S₀ , S₁
סעיף ג — צורת האות במוצא D₀

מפסק סגור נותן '1' (5V), מפסק פתוח נותן '0'. הנתון: S₀,S₂,S₄,S₆ פתוחים ו-S₁,S₃,S₅,S₇ סגורים. לכן D₁=1, D₀=0, כלומר dataIN = 10₍₂₎ = 2 (וגם לאחר המיסוך = 2):

זמן הדלקה = dataIN × 50 = 2 × 50 = 100 msec
זמן כיבוי = 150 - (dataIN × 50) = 150 - 100 = 50 msec

האות במוצא D₀ הוא גל מרובע מחזורי: 100ms במצב גבוה (LED דולק) ו-50ms במצב נמוך (LED כבוי), זמן-מחזור כולל 150ms.

5V ┐ ┌────────┐ ┌────────┐ ┌─── │ │ │ │ │ │ 0V ┘────┘ └────┘ └────┘ <--50--><--100--><--50--><--100--> [ms]
שאלה 17 (C) — הצגת מספר המפסקים הפתוחים בתצוגת 7-seg
חומרה: 3 מפסקים S₀–S₂ במבוא 300H · תצוגת 7-seg (CC) במוצא 301H · הצגת מספר המפסקים הפתוחים
סעיף א — הקוד להצגת הספרות 0, 1, 2, 3 בתצוגת 7-seg (CC)

בחיבור קתודה משותפת (CC) מקטע נדלק כאשר המוצא '1'. מיפוי: D₀=a, D₁=b, D₂=c, D₃=d, D₄=e, D₅=f, D₆=g.

ספרהמקטעים דולקיםקוד (בינארי gfedcba)הקסה
0a b c d e f01111110x3F
1b c00001100x06
2a b d e g10110110x5B
3a b c d g10011110x4F
סעיף ב — קריאת מצב כל מפסק בנפרד
// dataIN = Inp32(0x300); mask0 = dataIN & 0x01; // מצב S0 (הביט D0) mask1 = dataIN & 0x02; // מצב S1 (הביט D1) mask2 = dataIN & 0x04; // מצב S2 (הביט D2)
סעיף ג — התוכנית המלאה

מפסק פתוח נותן '0'. סופרים כמה מהביטים D₀,D₁,D₂ אפסיים, ומציגים את הספרה בתצוגה:

int codes[4] = {0x3F, 0x06, 0x5B, 0x4F}; // קודי הספרות 0..3 void main(void) { int dataIN, count; while (1) { dataIN = Inp32(0x300); count = 0; if ((dataIN & 0x01) == 0) count++; // S0 פתוח if ((dataIN & 0x02) == 0) count++; // S1 פתוח if ((dataIN & 0x04) == 0) count++; // S2 פתוח Out32(0x301, codes[count]); // הצגת מספר הפתוחים } }
שאלה 18 (C) — מערך שעות עבודה חודשי ושכר
נתונים: מערך של 31 שלמים · כל איבר = מספר שעות עבודה ביום · תעריף 28.49 ₪ לשעה
סעיפים 1–4 — התוכנית המלאה

מגדירים מערך של 31 שלמים, קולטים בלולאה את שעות העבודה לכל יום, סופרים את ימי העבודה ואת סך השעות (יום עם 0 שעות אינו יום עבודה), ולבסוף מחשבים את השכר:

#include <stdio.h> void main(void) { int hours[31]; int i, days = 0, total = 0; double salary; for (i = 0; i < 31; i++) // 2) קליטת שעות לכל יום בחודש scanf("%d", &hours[i]); for (i = 0; i < 31; i++) // 3) ספירת ימי העבודה וסך השעות if (hours[i] > 0) { days++; total += hours[i]; } printf("Days worked: %d\n", days); printf("Total hours: %d\n", total); salary = total * 28.49; // 4) חישוב השכר החודשי printf("Salary: %.2f\n", salary); }
💡
לדוגמת השאלה (0,5,8,…,8,0,6,8): כל איבר גדול מ-0 נספר כיום עבודה ומצטבר לסך השעות. השכר = total × 28.49.
שאלה 19 (Arduino) — מונה שניות לחיצה בתצוגת 7-seg (CC)
חומרה: תצוגת 7-seg (CC) על PD₀–PD₆ · לחצן PB₁ (הדק 9) עם נגד מעלה (משוחרר=1, לחוץ=0)
סעיף א — הסבר השורות 5, 11, 12, 20
5: pinMode(SW, INPUT); // הגדרת הדק 9 (הלחצן) כמבוא 11: while (digitalRead(SW)==1); // המתנה ריקה כל עוד הלחצן משוחרר 12: while (digitalRead(SW)==0) // כל עוד הלחצן לחוץ – ספירה 20: PORTD = arr[cnt]; // הצגת קוד ה-7seg של הספרה cnt
סעיף ב — הערך המוצג לפי משך הלחיצה

בכל סיבוב של הלולאה בשורה 12 מבוצע delay(1000) ואז cnt++, כלומר cnt סופר את מספר השניות המלאות שהלחצן היה לחוץ. אם cnt>9 מוצג הקוד המיוחד B01110110 (0x76) — צורת האות 'H'.

משך לחיצהcntהמוצג
0.5 שנייה1"1" (arr[1]=0x06)
3.5 שניות4"4" (arr[4]=0x66)
20 שניות200x76 → 'H' (cnt>9)
0.5s → "1"  ;  3.5s → "4"  ;  20s → 'H'
שאלה 20 (Arduino) — פוטנציומטר המדליק זוגות נוריות LED
חומרה: פוטנציומטר Rp (מחלק 0–5V) אל A₀ · שש נוריות L₂–L₇ על PD₂–PD₇ · ממיר A/D בעל 10 סיביות
התוכנית המלאה (סעיפים 1–4)

ממיר 10 סיביות נותן ערך 0–1023 עבור 0–5V. מחשבים את המתח, ולפי התחום מדליקים את זוג הנוריות המתאים. סף 1V ≈ 205 יחידות, סף 3V ≈ 614 יחידות.

void setup() { DDRD = B11111111; // PD0..PD7 כמוצאים } void loop() { float v = analogRead(A0) * 5.0 / 1023; // 1) קריאת המתח ב-A0 if (v <= 1) // 2) v ≤ 1V PORTD = B10000100; // L2 , L7 (PD2,PD7) else if (v < 3) // 3) 1V < v < 3V PORTD = B01001000; // L3 , L6 (PD3,PD6) else // 4) v ≥ 3V PORTD = B00110000; // L4 , L5 (PD4,PD5) }
v≤1V: L2,L7  ·  1<v<3V: L3,L6  ·  v≥3V: L4,L5
שאלה 21 (Arduino) — הצגת H/L בתצוגת 7-seg (CA) לפי לחצן
חומרה: תצוגת 7-seg (CA) על PD₀–PD₆ · לחצן PB₁ (הדק 9) עם נגד מעלה
💡
בחיבור אנודה משותפת (CA) מקטע נדלק כאשר המוצא '0' (הפוך מ-CC). מיפוי: PD₀=a … PD₆=g.
סעיף א — אתחול האוגרים
#define PB1 9 void setup() { DDRD = B01111111; // PD0..PD6 כמוצאים (למקטעים a..g) pinMode(PB1, INPUT); // הדק 9 (PB1) כמבוא ללחצן }
סעיף ב — הלולאה האינסופית (הצגת H או L)

קוראים את הרמה הלוגית ב-PB₁. עבור CA: להצגת 'H' (מקטעים b,c,e,f,g) → B00001001; להצגת 'L' (מקטעים d,e,f) → B01000111.

void loop() { if (digitalRead(PB1) == HIGH) // PB1 = '1' PORTD = B00001001; // 'H' בתצוגת CA else // PB1 = '0' PORTD = B01000111; // 'L' בתצוגת CA }
PB₁='1': H (B00001001)  ·  PB₁='0': L (B01000111)
שאלה 22 (Arduino) — חיישן טמפרטורה LM35 ושורת נוריות LED
חומרה: LM35 (10 mV/°C) אל A₄ · 8 נוריות L₀–L₇ על PD₀–PD₇ · ממיר A/D בעל 10 סיביות
סעיף א — הסבר השורות 4, 11, 15, 16
4: DDRD = B11111111; // PD0..PD7 כמוצאים (8 הנוריות) 11: Tvalue = analogRead(analogPin)/10; // קריאת A/D מ-A4 (0..1023) חלקי 10 15: Leds = (Leds << 1) | 0x01; // הזזה שמאלה + הצבת '1' בביט הנמוך 16: PORTD = Leds; // הוצאת תבנית "שורת" הנוריות

שורות 14–15 בונות שורת נוריות: לאחר Tvalue סיבובים נדלקות Tvalue הנוריות הנמוכות (0x01, 0x03, 0x07 …).

סעיף ב — הנוריות הדולקות בכל טמפרטורה

LM35 נותן 10mV/°C. ערך ה-A/D = Vout/5V × 1023 ≈ T × 2.046, ו-Tvalue = ערך/10.

TVoutanalogReadTvalueנוריות דולקות
2 °C20 mV40אף נורית (PORTD=0)
22 °C220 mV454L₀,L₁,L₂,L₃ (B00001111)
2°C: אף נורית  ·  22°C: L₀–L₃
סעיף ג — מאיזו טמפרטורה כל הנוריות דולקות?

כל שמונה הנוריות דולקות כאשר Tvalue ≥ 8 (בענף ה-if שורת 8 נוריות מלאה = 0xFF, ובענף ה-else עבור Tvalue>8 גם 0xFF). Tvalue=8 מחייב analogRead ≥ 80, כלומר:

Vout = 801023 × 5V ≈ 391 mV → T = 39110 ≈ 39 °C
כל הנוריות דולקות מ- T ≈ 39 °C ומעלה
🏠