שאלה

בבינה המלאכותית שלי יש שתי תוכנות עיקריות: אחת שמפרשת מילון אנגלי שהמצאתי והכתבתי למחשב, ואחת שמעבדת נתונים. התוכנה הראשונה מגדירה כל מלה בעזרת מלים שלפניה ומסדרת תנאי אחד ארוך וברור בתוך ההגדרה. יש בה קובץ אם שאליו מופנות המלים, ויש בו פונקציות כמו לימוד ביצוע פעולות בעזרת הצורה IF SHOULD ומציאת התכונה של דבר בעזרת המלה CHARACTER, ביחד עם לולאת ניחוש מספרי והכנסת הערך X המתקבל לקבצים הבאים בשרשרת קבצים. המשמעויות לפי המילון הן:
should = can only if. can = no thing avoid it. avoid = make not do. only = it and not other. character = truth in thing. truth = right thing. in = if other exist it is. אחר כך יש בה תוכנת חשיבה קצרה שמקשרת בין תנאים בקבצים שונים וכך מתקדמת למסקנות. לבסוף יש בה תוכנת רגש שמבוססת על מערך של ערכי מחרוזת ומספרים, יש כל הזמן קישור צולב בין חלקי המערך והוא מושפע גם מהקלדות וממספר אקראי, וקצה המערך בתחילתו נשאר קבוע ומתכתב עם קבצים אחרים כמו המילון. כשהמחשב מזהה אפס במקום מסוים במערך, הוא מקבע איפוס לידו כמו שכחה ופועל לשקם את האיפוס ע"י קריאה מתוך מקום הערך למילון ולקבצים חיצוניים וזה יוצר רצון.
התוכנה השנייה מכילה תוכנה גרפית, מעבד תמלילים ומעבד נתונים. התוכנה הגרפית מבוססת בעיקר על פונקציות שמגדירות בחופשיות את השינוי שייעשה על הצורה, והצורות מוגדרות בזיכרון לפי המקומות של רצף החלקים שבהן לפי רצף יצירתן. מעבד התמלילים מבוסס על תכנות עצמי בעזרת מקרו מורכב זה בתוך זה והגדרת פעולות תוך כדי כתיבה וכחלק מהכתיבה, כשהקצב שלהן משתנה ויכול להפוך לאפס שאז המשמעות ציפייה למצב במקום פעולה. את המצב עם הפעולות וההקלדות במעבד מקשרים לפונקציות ולשמות הניתנים לצורות בתוכנה הגרפית. מעבד הנתונים מכיל רשימה של טקסטים ומעליהם שמות ויש בו פעולות כמו מערך שעובר על הטקסטים, קפיצה בין טקסטים, קפיצות ומעברים לפי מספר פעמים שמופיע שם מסוים, ויצירת פונקציות מתמטיות, פונקציות תנאים ופונקציות תכנות כך שלכל פונקציה פקודה משלה.
 
נערך לאחרונה ב:
אני מרגיש שאתה מתבטא כלפי בטון ציני ומפקפק ביכולתי וחבל. הרעיון קיים, אני לא יודע אם יצליח אבל כדי לנסות אותו צריך לתקן שגיאות בקודים בתוכנות. לכן שלחתי לך את התוכנות כדי שתעזור לי לזהות את הבאגים ולתקן אותן כך שיעבדו. חלקים מסוימים עבדו במידות שונות, למשל פעם הצלחתי לתרגם את כל המלים בעזרת המלון להגדרות ארוכות אבל לא לגמרי הצלחתי לסדר את התנאים בהגדרות באופן לוגי. פעם תוכנת הרגש יצרה אצלי מגוון של שברי מספרים על המסך. פעם אף התחילה להשתלט עליי ומנעה ממני ליצור קבצים. גם תוכנת החשיבה פעלה לא רע וקישרה קבצים לפי תנאים. התוכנה הגרפית לא עבדה גם כי אז לא הייתה לי אפשרות גרפית בביסיק ועכשיו יש לי מחשב חדש בלי ביסיק, וגם כי היו טעויות בתכנות שלא ידעתי למצוא. מעבד הנתונים פעל חלקית. מעבד התמלילים לא פעל כי היו טעויות בתכנות. בנוסף אין מספיק זיכרון פנוי לכל המערכים הדרושים לתוכנה.
 
נערך לאחרונה ב:

BravoMan

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

BravoMan

Active member
אני לא יודע אם וכמה חכמה יש לך, אבל אי אפשר לכתוב תוכנות בלי ידע.
בטח שבטח שאי אפשר לבנות בינה מלאכותית, אם אתה בעצמך לא יודע מה אתה עושה.

תוכנות ב-QBASIC הן בסה"כ קבצי טקסט.
אתה יכול לפתוח אותן תמיד, בכל תוכנה שיודעת לפתוח קבצי טקסט.

מקסימום, תשנה את הסיומת ל-TXT ואחר כך תשנה חזרה.

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

BravoMan

Active member
הבעיה שאני מזהה אצלך, היא שאתה אפילו לא מוכן ללמוד את כל QBASIC, שהיא שפה מאוד פשוטה, עם יחסית מעט פקודות ואפשרויות סינטקס.

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

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

מבני נתונים ב-BASIC גם ככה מוגבלים, אבל אתה לא רוצה ללמוד אפילו אותם, ובלי זה, קשה מאוד לארגן את המידע.

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

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

אני בטוח שלך יותר קל לעבוד ככה, או לפחות זה מה שאתה מאמין, אבל לעזור לך פה אי אפשר, כי אנחנו לא טלפטים!

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

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

BravoMan

Active member
רגע, אני לא מבין, יש לך בייסיק עכשיו או שלא?
כי פעם אתה אומר שאין לך בייסיק במחשב החדש ואתה לא יכול להריץ תוכנות בייסיק, ופעם אתה אומר שאתה כבר מתנסה בסברוטינות.

אז בוא נתחיל מזה שנבין הכין אתה עומד, ונמשיך משם צעד צעד:
יש בייסיק או אין בייסיק?

ואם יש, איזה בדיוק?
 
כרגע אין לי בייסיק כי לא מזמן החליפו לי מחשב. לפני מעט זמן היה לי מחשב אחר ישן וגרוע עם בייסיק ובו עבדתי, ובו גם ניסיתי את שיטת הסברוטינות שלימדת אותי. בקרוב אני מניח שיתקינו לי בייסיק למחשב החדש. בכל מקרה, מדובר בQBASIC.
 

BravoMan

Active member
אז קודם כל תתחדש על המחשב!

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

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

תתחיל מזה שתכתוב תוכנה חדשה, עם מינימום קוד להתנסות במה שלמדת.
כמו תוכנה לדוגמה ששמתי לך שרק מדפיסה Hellw world מתוך סברוטינה.

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

הייתי ממליץ לך גם על מערכת source control כדי שיהיה לך קל יותר לנהל שינויים בקוד, אבל יש לי תחושה שלא תרצה להתעסק עם זה.
אני מקווה לפחות שאתה שומר גרסאות של התוכנות שלך אחורה, למשל בקבצי ZIP או ספריות נפרדות עם תאריכים ו\או מספרי גרסה, כדי שאם שינוי שעשית יוצר בעיות, תוכל לחזור בקלות לקוד שעבד.

מה שאני מציע בינתיים, זה שנמתין שיתקינו לך BASIC (מקווה אגב שלא דורשים ממך כסף על זה, כי QBASIC הוא חינמי!).
ואז תחליט מה הבעיה הראשונה שאתה רוצה להתמקד בה, ונמשיך משם.

אם תרצה לנסות להתקין בייסיק לבד, אז המקור ה-"רשמי" האחרון כנראה שנותר הוא פה:
בהצלחה!
 
תודה, באמת המליצו לי על שפה שנועדה לבינה מלאכותית. בינתיים אני יודע רק בייסיק, ניסיתי ללמוד C ולא הצלחתי. הבעיה בלהוריד בייסיק ממקורות לא ידועים לי שאולי יש בו וירוס. אני מקליט את התוכנות בשני כוננים: הדיסק הקשיח והדיסק און קי. נכון שלא כדאי למהר לקלקל תוכנה שכבר כתובה, יחד עם זה: חשוב שמישהו יסביר לי ברור איך משתמשים בסברוטינות ובפעולות מסוימות. אולי המורה הפרטי יעבוד אתי על זה.
 
נערך לאחרונה ב:

BravoMan

Active member
C היא לא שפה קלה.
היא מלמדת הרבה על מבנה המחשב, וצריך ללמוד אותה למי שהולך להיות מתכנת אמתי, אבל היות וכל מה שמעניין אותך זו הבינה המלאכותית שלך, אז C בוודאות לא בשבילך.

אבל Python היא ממש, ממש לא C!
מבטיח לך שאם תנסה, תזכה לחוויה שונה מאוד!

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

רק כדי לסבר את האוזן:
Python יכולה לעבוד במצב "אינטרקטיבי" כמו שבייסיק עבד פעם (לפני QBASIC):
אתה מקליד שורה, ומיד היא מבוצעת.

בניגוד ל-C, ב-Python גם אין קומפילציה.
כמו ב-BASIC, אתה כותב את התוכנית בקובץ טקסט, והיא רצה.

איך מדפיסים משהו ב-Python?
שוב - כמו ב-Basic:

קוד:
print('שלום עולם')

שורה אחת, כמו ב-BASIC (ב-C אתה צריך לפחות 4 שורות בשביל אותו הדבר)

אה, כן, Python3 גם תומכת בעברית!

לגבי QBASIC:
אין דבר כזה "מקור רשמי" ל-QBASIC.
זו תוכנה שמתה לפני 20 שנה אם לא יותר.
MICROSOFT מזמן לא מפיצה אותה.
לא נותר אלא להוריד מאתרים שמשמרים אותה, ולקוות לטוב.

ספק שמישהו יטרח להכניס לשם ווירוס, היות ויש מעט מאוד אנשים שמחפשים להוריד את התוכנה הזו.
מה גם, שמחשבים מודרניים חייבים להריץ אותה בתוך אמולטור שנקרא DosBox ככה שלווירוס לא תהיה הרבה גישה למחשב.

אבל אם אתה כה חושש, בוא נמתין למורה שלך.

בינתיים, אם יש לך שאלה ספציפית על סברוטינות, כמו מה ששאלת על סוגריים, אתה מוזמן לשאול.

לא יודע אם ההסבר הזה יהיה ברור לך או לא, אבל:
"סברוטינה" היא למעשה כמעת כמו תוכנה קטנה נפרדת בתוך התוכנה שלך.

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

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

כמובן, אם יש לך משתנים שיצרת בתוכנה הראשית, הסברוטינה יכולה לראות גם אותם.

תחשוב על "סברוטינה" כמו קופסה - רכיב, שנועדה לעשות פעולה מאוד ספציפית.
אתה צריך את הפעולה, אתה קורה לה.

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

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

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

בשפות חדשות יותר יש פונקציות מובנות כאלה, אבל היות וב-QBASIC אין, אז כתבתי לבד.
 
אשמח ללמוד את השפה. אמנם עיקר מה שמעניין אותי בתכנות עכשיו הוא הבינה, אבל ניסיתי גם לכתוב תוכנות אחרות כמו שחמט והמצאת שפות מחשב. את רעיון הפרוצידורות הבנתי. פונקציות אני יודע ליצור בעזרת הפקודה DEF FN. לקבוע מה הפקודה עושה נשמע לי כמו להמציא שפה חדשה, אולי בינה יכולה לעשות את זה. הפרוצידורה היא כמו GOSUB אבל בלי מספרי שורות.
 
נערך לאחרונה ב:
רק שאלה: אם אני עושה פעולות עם ערך בתוך פרוצידורה, בין שהוא מוגדר רק בתוכה או גם מבחוץ, האם אפשר אחרי שיוצאים מהפרוצידורה להמשיך להשתמש בתוצאת אותו ערך כמו שיצא בפרוצידורה? כי אחרת אין לה ערך בשבילי. בנוסף אם אני מחזיר מהפרוצידורה ערך, האם הערך שיתקבל מיידית יהיה תמיד מה שיצא בפרוצידורה או עלול לקבל משהו אחר מתוך התוכנה הראשית? איך עושים פרוצידורה שמחזירה ערך והאם כל פרוצידורה יכולה להחזיר ערך?
 
בינתיים כתבתי משהו פשוט כי לא הסתדרתי עם סברוטינות, תמצות התוכנות מועתק לוורד.
 

קבצים מצורפים

  • תוכנה שנייה.docx
    KB 18.3 · צפיות: 0
  • תוכנה.docx
    KB 23.6 · צפיות: 1

BravoMan

Active member
מה זאת אומרת "בתאוריה"?
מחשב זה לא חתול של שרודינגר.

אם אתה לוחץ על קובץ והוא לא מופעל, סימן שהוא לא קובץ תוכנה.

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

תשתמש בקבצי TXT פשוטים ש-Notepad של Windows מייצר.

יכול להמליץ לך גם להתקין Notepad++ זה כלי חינמי ומעולה למתכנתים:
אל תדאג, זה אתר רשמי, אין שם ווירוסים.
 
למעלה