עבור לתוכן

צריך תרגילים להתאמן על CPP

Featured Replies

פורסם

שלום,

ביום שלישי הקרוב יש לי מבחנים לגאמ"א ואני אצטרך לכתוב קוד ב-CPP. למדתי רק את הסינטקס הבסיסי של השפה מזמן ואני רוצה קצת לתרגל קצת מקרים מסובכים יותר גם כדי לפתח את הלוגיקה שלי וגם כדי להזכר בשפה.

אתמול פתרתי את חידת 8 המלכות בתכנות פרוצדוראלי ואני מתכוון להעביר את זה גם לתכנות מונחה עצמים בשביל התרגול.

אילו חידות נוספות יש שאני יכול לפתור לתרגול?

פורסם

חידת המלכות היא בדיוק דוגמה לבעיה שלא מתאימה במיוחד לתכנות מונחה עצמים. לדעתי, אל תטרח.

הנה בעיית מחמד נחמדה:

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

פורסם
  • מחבר

תודה על הרעיון אבל אין לי שום מושג איך להתחיל את זה אפילו.. אני אשמח לקבל קצת עזרה לגבי זה.

עריכה

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

לפי מה שהבנתי צריך לכלול את הקובץ conio.h. הוספתי את הקובץ אבל הקומפיילר נותן לי שגיאה כשאני מנסה לקרוא לפונקציה getch().

הוא אומר שהשגיאה היא בשורה הבאה:

KeyStroke =	getch();

זה כל הקוד:

/* This program shows how to pick up the scan codes from a keyboard */

/* These define the scan codes(IBM) for the keys. All numbers are in decimal.*/
#define PAGE_UP 73
#define HOME 71
#define END 79
#define PAGE_DOWN 81
#define UP_ARROW 72
#define LEFT_ARROW 75
#define DOWN_ARROW 80
#define RIGHT_ARROW 77
#define F1 59
#define F2 60
#define F3 61
#define F4 62
#define F5 63
#define F6 64
#define F7 65
#define F8 66
#define F9 67
#define F10 68
#include <iostream>
#include <conio.h>

using namespace std;

void main()
{
char KeyStroke;

cout << "Press Escape to quit." << endl;

do
{
KeyStroke = getch();

if (KeyStroke == 0)
{
KeyStroke = getch(); // Even though there are 2 getch() it reads one keystroke
switch (KeyStroke)
{
case PAGE_UP:
cout << "PAGE UP" << endl;
break;
case PAGE_DOWN:
cout << "PAGE DOWN" << endl;
break;
case HOME:
cout << "HOME" << endl;
break;
case END:
cout << "END" << endl;
break;
case UP_ARROW:
cout << "UP ARROW" << endl;
break;
case DOWN_ARROW:
cout << "DOWN ARROW" << endl;
break;
case LEFT_ARROW:
cout << "LEFT_ARROW" << endl;
break;
case RIGHT_ARROW:
cout << "RIGHT_ARROW" << endl;
break;
case F1:
cout << "F1" << endl;
break;
case F2:
cout << "F2" << endl;
break;
case F3:
cout << "F3" << endl;
break;
case F4:
cout << "F4" << endl;
break;
case F5:
cout << "F5" << endl;
break;
case F6:
cout << "F6" << endl;
break;
case F7:
cout << "F7" << endl;
break;
case F8:
cout << "F8" << endl;
break;
case F9:
cout << "F9" << endl;
break;
case F10:
cout << "F10" << endl;
break;
default:
cout << "Some other key." << endl;
}
}
else
cout << KeyStroke << endl;
}
while (KeyStroke != 27); // 27 = Escape key
}

אני לא מצליח להבין למה הוא לא מהדר את זה..

זאת השגיאה שהוא נותן:

arrow.cpp: In function `int main(...)':

arrow.cpp:35: implicit declaration of function `int getchar(...)'

אני משתמש ב-Dev c++ 4.

פורסם

מוזר. הוא צועק שאתה משתמש ב-getchar בלי להצהיר עליו, לא על getch.

בכל מקרה, נסה להוסיף אינקלוד ל-stdio.h.

אגב, את ה-main אתה צריך להגדיר שתחזיר int, ולא void.

פורסם

אל תתעסק יותר מדי בממשק המשתמש. מקסימום תדפיס מחדש את כל שורות התפריט ותשתמש ב-scanf או cin על מנת לקרוא שורה כל פעם.

האתגר כאן הוא ללמד את עצמך תכנון אובייקטים.

פורסם

אגב, אתה לא תהיה חייב לכתוב קוד דווקא ב c++. אם אני זוכר נכון אפשר לפתור את השאלות הפתוחות ב c\c++\c#\pascal כשהדגש היה על האלגרותימיקה (לכתוב קטע קוד/פונקציה).

פורסם
  • מחבר

אם כך, מה שאני צריך כאן זה מחלקה של תפריט, ומחלקה של איבר בתפריט. נכון?

ואני יודע שאני לא חייב לכתוב דווקא ב-CPP, אבל שאר האופציות לא מדברות אלי. C# ו-C אני לא יודע ופסקל אני צריך לעשות חזרה.

ואני מעדיף לענות על השאלות ב-CPP מאשר בפסקל.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים