נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: פרולוג ו - Dr. Scheme

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
Hellboy
משתמש מתחיל
משתמש מתחיל
סמל אישי

הצטרף / הצטרפה: 20 August 2010
מדינה: Israel
משתמש: מנותק/ת
הודעות: 1
נשלח בתאריך: 20 August 2010 בשעה 14:49 | IP רשוּם
ציטוט Hellboy

שלום רב לכולם,

יש לי שתי בעיות:

בעיה ראשונה:

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

לבעיה זו יש לי פתרון וזה הפתרון (תעתיקו ל - notepad):

% word(X) iff X is a word


word("foo").


word("bar").


word("baz").

 

% prefix(?A, +B) iff A is a prefix of B


prefix([], _).


prefix([A|B], [A|C]) :- prefix(B, C).

 

% sublist(?A, +B) iff A is a sublist of B


sublist(A, B) :- prefix(A, B).


sublist(A, [_|B]) :- sublist(A, B).

 

% reversed(?A, +B) iff A is reversed B


reversed(A, B) :- reversed(B, [], A).


reversed([A|B], C, D) :- reversed(B, [A|C], D).


reversed([], A, A).

 

% rowsreversed(?A, +B) iff matrix A is matrix B with reversed rows


rowsreversed([A|B], [C|D]) :- reversed(A, C), rowsreversed(B, D).


rowsreversed([], []).

 

% transposed(+A, ?B) iff matrix B is transposed matrix A


transposed(A, B) :- transposed(A, [], B).


transposed(M, X, X) :- empty(M), !.


transposed(M, A, X) :- columns(M, Hs, Ts), transposed(Ts, [Hs|A], X).

 

% empty(+A) iff A is empty list or a list of empty lists


empty([[]|A]) :- empty(A).


empty([]).

 

% columns(+M, ?Hs, ?Ts) iff Hs is the first column


%   of matrix M and Ts is the rest of matrix M


columns([[Rh|Rt]|Rs], [Rh|Hs], [Rt|Ts]) :- columns(Rs, Hs, Ts).


columns([[]], [], []).


columns([], [], []).

 

% inmatrix(+M, ?W) iff word W is in the matrix M


inmatrix(M, W) :- inrows(M, W).


inmatrix(M, W) :- incolumns(M, W).


inmatrix(M, W) :- inleftdiagonals(M, W).


inmatrix(M, W) :- inrightdiagonals(M, W).

 

% inrows(+M, ?W) iff W or reversed W is in a row of M


inrows([R|_], W) :- word(W), sublist(W, R).


inrows([R|_], W) :- word(W), reversed(V, W), sublist(V, R).


inrows([_|Rs], W) :- inrows(Rs, W).

 

% incolumns(+M, ?W) iff W or reversed W is in a column of M


incolumns(M, W) :- transposed(M, N), inrows(N, W).

 

% inleftdiagonals(+M, ?W) iff W or reversed W is in a left diagonal of M


inleftdiagonals(M, W) :- inupperleftdiagonals(M, W).


inleftdiagonals(M, W) :- transposed(M, N), inupperleftdiagonals(N, W).

 

% inupperleftdiagonals(+M, ?W) iff W or reversed W is in an upper left diagonal of M


inupperleftdiagonals(M, W) :- upperdiags(M, N), inrows(N, W).

 

% upperdiags(+M, ?X) iff X is a list of upper diagonals of matrix M


upperdiags(M, X) :- upperdiags(M, [], Y), reversed(Z, Y), transposed(Z, X).


upperdiags([R|Rs], A, X) :- columns(Rs, _, T), upperdiags(T, [R|A], X).


upperdiags([], X, X).

 

% inrightdiagonals(+M, ?W) iff W or reversed W is in a right diagonal of M


inrightdiagonals(M, W) :- rowsreversed(N, M), inleftdiagonals(N, W).

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

בעיה שנייה:

      כתבו תכנית ב- Scheme אשר מבצעת קידוד ופענוח של קידוד אריתמטי.

הקלט לפונקצית הקידוד:

                     א.         רשימה של זוגות מהצורה (letter, prob) : אות מקור וההסתברות שלה. סכום ההסתברויות הוא 1.

                     ב.         זרם, שיכול להיות אינסופי (infinite stream), של טקסט המקור באותיות המקור.

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

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

 

אשמח לקבל פתרון והסבר לבעיה זו גם,

 

בתודה מראש,

 

רותם

 



__________________
Hellboy
חזרה לתחילת העמוד הצג את כרטיס החבר של Hellboy חפש הודעות אחרות של Hellboy
 

אם ברצונך להגיב לנושא זה עליך קודם להתחבר
אם אינך רשום/ה כבר עליך להרשם

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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