עבור לתוכן

יעילות - אני צריך ללמוד את כל הנושא הזה... עריכה: או שלא?

Featured Replies

פורסם

אז זה לא סדרי זמן ריצה.

  • תגובות 40
  • צפיות 3.5k
  • נוצר
  • תגובה אחרונה

משתתפים בולטים בדיון

פורסם
  • מחבר

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

וזה לא משנה כמה יש בכל שורה?

כאילו אם מ-1 קופץ ל4 ואז ל 16 וכו'...

ומה בקשר לזה

עריכה:

ולמה אני, או יותר נכון איך אני עושה שהמערכים יהיו גמישים - בסגנון הזה:

int arr1[size/2];

int arr2[size/2 + 1];

פורסם

הגובה נהפך לlog4(n) השאר תלוי בגודל של הקלט בכך פיצול, ובפונקציה שמתבצעת לאחר הקריאה.

פורסם

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

מסובך להסביר את זה בהודעה אחת.

תתחיל מפה:

http://he.wikibooks.org/wiki/%D7%A9%D7%A4%D7%AA_C/%D7%94%D7%A7%D7%A6%D7%90%D7%AA_%D7%96%D7%99%D7%9B%D7%A8%D7%95%D7%9F_%D7%93%D7%99%D7%A0%D7%90%D7%9E%D7%99%D7%AA

אחרי זה כבר יהיה אפשר לדבר. כמובן יש מלא מידע בסיסי בגוגל :P

פורסם
  • מחבר

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

מסובך להסביר את זה בהודעה אחת.

תתחיל מפה:

http://he.wikibooks.org/wiki/%D7%A9%D7%A4%D7%AA_C/%D7%94%D7%A7%D7%A6%D7%90%D7%AA_%D7%96%D7%99%D7%9B%D7%A8%D7%95%D7%9F_%D7%93%D7%99%D7%A0%D7%90%D7%9E%D7%99%D7%AA

אחרי זה כבר יהיה אפשר לדבר. כמובן יש מלא מידע בסיסי בגוגל :P

סידר אותי. תודה!

כרשמת את זה אז חשבתי שזה בטח קשור ליעילות איכשהו.. =]

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

פורסם

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

מומלץ בחום לעבוד אם דיבאגר טוב.

פורסם
  • מחבר

אני מניח אני יסתדר עם הזמן.

כשלמדתי אמבלר התעסקתי רק עם זיכרון, ואני לא מאמין ששפת עילית תיהיה מסובכת יותר מסף, לא?

איך הדיבאג של טורבו C? זה היחיד שאני יכול לעבוד איתו =\

פורסם

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

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

הדיבאגר הזה לא משהו. visual studio הרבה יותר טוב.

יש סיבה למה אתה צריך את הטורבו ספציפית?

פורסם
  • מחבר

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

כמובן שיש את העיניין הקטן שבזה מתכנתים ביג אצלי D=

פורסם

לאיזה פונקציות אתה מתכוון?

פורסם

כנראה הוא מדבר על הספרייה graphics.

פורסם
  • מחבר

בין היתר.

בכל אופן לא אני קבעתי במה לתכנת, אלא המנהל של יג =\

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

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

THANKS.

/*Nir Ben Ezri Task2*/

#include "stdio.h"
#include "conio.h"
#include "math.h"
#include "stdlib.h"

void sort(int *a,int size); /* Sorting the arrey */
void combine(int *a, int *arr1, int *arr2, int size, int sArr1, int sArr2); /* Combine arr1 & arr2 into arrey a by sorting variabels */

int main()
{
int i,n=100;
int *x=(int*)malloc(n * sizeof(int));
clrscr();
for(i=0;i<n;i++)
x[i]=random(100) + 1;
sort(x,n);
for(i=0;i<n;i++)
printf("%d , ", x[i]);
free(x);
getch();
return(0);
}

/* Sorting the arrey */
void sort(int *a,int size)
{
int *arr1=(int*)malloc((size/2) * sizeof(int));
int *arr2=(int*)malloc(((size/2)+1) * sizeof(int));
int i, arr2s;

if(!arr1 || !arr2)
{
printf("not enof space!");
return;
}

if(size<=1)
{
free(arr1);
free(arr2);
return;
}

for(i=0;i<size;i++)
{
if(size/2>i)
arr1[i]=a[i];
else
arr2[i-(size/2)]=a[i];
}

arr2s = size%2==0 ? size/2 : (size/2)+1;

sort(arr1,size/2);
sort(arr2,arr2s);

combine(a, arr1, arr2, size, size/2, arr2s);

free(arr1);
free(arr2);

return;
}

/* Combine arr1 & arr2 into arrey a by sorting variabels */
void combine(int *a, int *arr1, int *arr2, int size, int sArr1, int sArr2)
{
if(size==0)
return;
if(sArr2==0 || arr1[0] < arr2[0] && sArr1>0)
{
a=arr1;
combine(a+1, arr1+1,arr2, size-1, sArr1-1, sArr2);
return;
}
a=arr2;
combine(a+1, arr1,arr2+1, size-1, sArr1, sArr2-1);
}

אה ועוד משהו יש משהו אני יכול לעשות עם זה:

	if(!arr1 || !arr2)
{
printf("not enof space!");
return;
}

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

פורסם

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

פורסם
  • מחבר

מה הכוונה לניקוי יותר מסודר?

ומה בקשר לכל השאר?

פורסם

1) קודם כל, לא בדקת אם הזכרון הוקצה בהצלחה ב main

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

אגב, מספיק - enough לא enof.

ארכיון

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

דיונים חדשים