עזרה בכתיבת תוכנית בC++\VB - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה בכתיבת תוכנית בC++\VB


mabool

Recommended Posts

אוקי שלום, אני חדש אבל בכל זאת אשמח עם תעזרו לי.

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

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

אין צורך בכל מיני תחכומים וכד'.

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

חבר שלי כתב לי תוכנית אחת בC++ אשר פולטת קובץ טקסט עם הזמנים. איך אין הוא יודע איך לדייק יותר משניות (הוא קורא את השעון של הוינדוס).

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

תוכנית שניה שהוא עשה בVB מודדת כמה זמן עובר בין לחיצה ללחיצה, בסוגריים בנוסף. במדידת MS.

לא הבנו למה אבל יש שגיאה, כשעוברות נגיד 2 שניות זה רושם שעברו רק 50-150 מילישניות. הנה הקוד (אני יכול להעלות גם את התוכנה עצמה)


Option Explicit
Public cnt, pcnt As Integer
Private Sub Form_KeyPress(KeyAscii As Integer)

Open "Log.txt" For Append As #1
Print #1, (Date & ", " & Time & "- " & Chr(KeyAscii) & "(" & (cnt - pcnt) & " ms)")
Close #1
pcnt = cnt
End Sub

Private Sub Form_Load()
cnt = 0
Open "Log.txt" For Append As #1
Print #1, "Activated on " & Date & ", " & Time
Close #1
End Sub

Private Sub Timer1_Timer()
cnt = cnt + 1
End Sub

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

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

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

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

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

תודה :)

קישור לתוכן
שתף באתרים אחרים

תזכור שהפעולה של פתיחת קובץ + כתיבה לתוכו היא פעולה שלוקחת "יחסית" הרבה זמן.

זה אומר שהמדידה שלך תהיה מאוד לא מדוייקת (תדאג לעדכן את pcnt לפני שאתה כותב לתוך הקובץ).

חוץ מזה, ה-interval של הטיימר לא מדויק כשמדובר במידות קטנות.

יש ל- פונקציות שמחזירות את הזמן המדויק (דיוק של אלפיות שנייה), אתה מוזמן לחפש אותן ב-msdn (נראה לי שהפונקציה נקראת Now).

קישור לתוכן
שתף באתרים אחרים

אז בכללי אי הדיוק נובע מזה שהפעולות האחרות לוקחות זמן. ולכן האי דיוק שונה בין מעבד למעבד.

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



Option Explicit
Public cnt, sc as Integer
Private Sub Form_Load()
cnt=0
sc=Second(Time)
Timer1.Interval=1
Timer1.Enabled=True
End Sub
Private Sub Timer1_Timer()
cnt=cnt+1
if Second(Time)-sc=1 then
MsgBox cnt
end if
end sub

הקוד אמור לבדוק כמה מילישניות של התוכנה שקולות לשניה של הוינדוס.

יוצא שזה משתנה כל פעם שמריצים. רעיונות?

אה ולא מצאתי בMSDN את זה, אתה יכול להפנות אותי בלינק?

קישור לתוכן
שתף באתרים אחרים

זה ב- #C, אבל אני בטוח שתבין.

המספרים בפלט הם הפרשי Ticks. כל תקתוק הוא 100 ננושניות. ע"מ להמיר למילישניות צריך לחלק ב TicksPerSecond


{
const int maxChars = 10;
static void Main(string[] args)
{
long[] pressTimes = new long[maxChars];

int k = 0;
while (k < maxChars)
{
Console.ReadKey(true);
pressTimes[k++] = DateTime.Now.Ticks;
}

Console.WriteLine();
for (int i = 1; i < maxChars; i++)
{
long p = pressTimes[i - 1];
Console.Write((pressTimes[i] - p) + " ");
}

Console.WriteLine();
}
}
 class Program

קישור לתוכן
שתף באתרים אחרים

תכין תשעון עם סטופר על 0.

ולולאה בc++ אין סופית שאתה לחוץ על נגיד t היא מתחילה לעבוד.

עכשיו תילחץ על שניהם ביחד.

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

נגיד מיספר 66658 אז תעשה לולאה שרצה מ 0 עד 66658 ותידע שזה דקה.

דרך הגב אין לי מוסג בזה אני לומד בערך חודש מי ספר.

קישור לתוכן
שתף באתרים אחרים

הפתרון הזה ממש ממש גרוע:

1. מחשבים שונים עובדים במהירויות שונות.

2. אותו מחשב יעבוד במהירות שונה כל פעם שתריץ את התכנית (זה תלוי בעומס שיש על המערכת כרגע, וב-multiprocessing של חלונות).\

3. עצם הריצה של הלולאה הזו תעמיס מאוד על המעבד לשווא.

קישור לתוכן
שתף באתרים אחרים

אוקי תודה לכולם, מצאתי קוד בVB שיושם ע"י חבר שלי (שוב אני מציין אני נוב בתחום :nixweiss:)


Public Function MyTime() As String
MyTime = Format(Now, "dd-MM-yyyy HH:nn:ss") & "." & Right(Format(Timer, "#0.00"), 2)
End Function
Private Sub Form_KeyPress(KeyAscii As Integer)
Open "Log.txt" For Append As #1
Print #1, (MyTime & "- " & Chr(KeyAscii))
Close #1
End Sub

Private Sub Form_Load()
Open "Log.txt" For Append As #1
Print #1, "--Activated on " & MyTime & "--"
Close #1
End Sub

והוא עובד. תודה לכווולם :)

נ.ב. אפשר לעשות ככה שזה ימדוד כמה זמן כפתור לחוץ?

קישור לתוכן
שתף באתרים אחרים

הפתרון הזה ממש ממש גרוע:

1. מחשבים שונים עובדים במהירויות שונות.

2. אותו מחשב יעבוד במהירות שונה כל פעם שתריץ את התכנית (זה תלוי בעומס שיש על המערכת כרגע, וב-multiprocessing של חלונות).\

3. עצם הריצה של הלולאה הזו תעמיס מאוד על המעבד לשווא.

יש לך רעיון יותר טוב ליצור זמן ב c++.?

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...