Try HWzone in English English
עבור לתוכן
  • צור חשבון
  • מי אנחנו?

    שלום אורח/ת!

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

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

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

ארכיון

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

Pure-Gold

פונקציות שימושיות בכל השפות

Recommended Posts

לא בדיוק פונקציה, אבל the right way להכניס פלאש לדפי XHTML בצורה תיקנית, שיעברו ולידציה ויעבדו בכל הדפדפנים:

<object
type="application/x-shockwave-flash"
data="flash.swf"
width="300"
height="120">
<param
name="movie"
value="flash.swf" />
</object>

וזהו.

בלי EMBED (שזה טאג HTML שנזנח ב-XHTML) ובלי codebase ושאר הזבל.

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

להסברים, ובכלל קרדיט על כל הנושא הזה:

http://www.alistapart.com/articles/flashsatay/

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

שפה: VB

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

Public Function isAlpha(str As String) As Boolean
str = Trim(str)
str = LCase(str)
If str = "" Then
isAlpha = False
Exit Function
End If
Dim i%
Dim ch As String
For i = 1 To Len(str)
ch = Mid(str, i, 1)
If (ch < "a" Or ch > "z") And (ch < "א" Or ch > "ת") And (ch <> " ") Then
isAlpha = False
Exit Function
End If
Next
isAlpha = True
End Function

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

מקרו C מאוד מועיל שמאפשר לדעת אם מספר כלשהו הוא חזקה של שתיים:

#define IS_POWER_OF_TWO(x)    ( (x) && (! ((x) & ((x) - 1)) )

ב-C++ כמובן עדיף פונקציה inline שמחזירה bool.

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

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

שפת C, בודק האם מחרוזת ריקה או מכילה רק רווחים :hat:



// Returns 0 if pStr == NULL or all symbols in * pStr are spaces
int IsStrEmpty ( char const * const pStr )
{
int isStrEmpty = pStr == NULL ;
if ( ! isStrEmpty )
{
int strIndex = 0 ;
int strLen = strlen ( pStr );
for ( ; strIndex < strLen && isStrEmpty ; strIndex ++ )
{
isStrEmpty = pStr [ strIndex ] > ' ';
}
}
return isStrEmpty ;
}



שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

שפת C, בודק האם מחרוזת ריקה או מכילה רק רווחים :hat:



// Returns 0 if pStr == NULL or all symbols in * pStr are spaces
int IsStrEmpty ( char const * const pStr )
{
int isStrEmpty = pStr == NULL ;
if ( ! isStrEmpty )
{
int strIndex = 0 ;
int strLen = strlen ( pStr );
for ( ; strIndex < strLen && isStrEmpty ; strIndex ++ )
{
isStrEmpty = pStr [ strIndex ] > ' ';
}
}
return isStrEmpty ;
}

נא לא להשתמש בפונקציה isStrEmpty.

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

2) באופן כללי כדאי להשתמש בפונקציות isXXXX או iswXXXX בספריה הסטנדרטית.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

הנה פתרון קצת יותר טוב:

#include <ctype.h>

bool isStrEmpty(const char* pStr) {
if (!pStr)
return true;

for ( ; *pStr != '\0' ; ++pStr) {
if (!isspace(*pStr))
return false;
}

return true;
}

קצר יותר, אלגנטי יותר, ואין בו באגים.

נ.ב. אין סיבה להשתמש ב-const * const, כי המצביע גם ככה עובר by value.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

לדעתי משהו כזה בכלל לא שייך לסטיקי. זו פונקציה בסיסית ולא מאוד שימושית.

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

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

הנה קטע תוכנית בVB שמוצא נקודת חיתוך בין 2 ישרים(אתם צריכים לתת את הנקודות שיוצרות את הישר):


Private Sub Command1_Click()
' made by ofir tadmor. plz dont delete this.
X1 = Text1.Text 'coord of point one in line 2
Y1 = Text2.Text
X2 = Text3.Text 'coord of point 2 in line 1
Y2 = Text4.Text

x3 = Text7.Text 'coord of point 1 in line 2
y3 = Text8.Text
x4 = Text9.Text 'coord of point 2 in line 2 'made by ofir tadmor
y4 = Text10.Text

a1 = Y2 - Y1
b1 = X1 - X2
c1 = -(X1 * a1 + Y1 * b1)
a2 = y4 - y3
b2 = x3 - x4
c2 = -(x3 * a2 + y3 * b2)

If a2 * b1 - a1 * b2 <> 0 Then ' not parellal

x = (b2 * c1 - b1 * c2) / (a2 * b1 - a1 * b2)
y = -(a2 * c1 - a1 * c2) / (a2 * b1 - a1 * b2)
Else
MsgBox "àéï çéúåê"
Exit Sub

End If


Text5.Text = x
Text6.Text = y



End Sub

עוד, מאותה תוכנית:



Private Sub Command2_Click()
'made by ofir tadmor. plz dont del this

a = Text1.Text 'x coord of line vec
b = Text2.Text 'y coord of line vec

c = Text3.Text 'x coord of move vec
d = Text4.Text 'y coord of move vec

Dim mul As Double
mul = -2 * (a * d - b * c) / (a * a + b * b) 'made by ofir tadmor

Text5.Text = mul * b + c 'new x move vec
Text6.Text = -mul * a + d 'new y move vec

End Sub



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

השתמשו בזה בחוכמה.

עריכה: כתבתי את זה לפני שנתיים בערך. נחמד להיזכר בזה...

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

עריכה 2: שיניתי משהו קטן בתוכנית.

[attachment deleted by admin]

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

פונקציה ב C החזר מילה

המקבלת STRING (מערך של CHAR) ומחזירה מערך חדש המכיל את מילה מספר- פרמטר

כאשר מילה ראשונה היא 1

מילה שנייה 2 וכו.

הפונקציה מפרידה מילים על פי ערך הASCII של רווח " ".

יש להכליל את STRING.H


char * strcropword(char str[],int num)
{
int i=0,j=0,k=0,last;
char *tmp =(char*)malloc(sizeof(char)*(strlen(str)));
strcpy(tmp,str);
if (num>1)
{
for(i=0;k<num-1;k++,i++){
while (str[i]!=32)
i++;
}
tmp=&tmp[i];
}

while (str[i]!=32 && str[i]!=0)
{i++;j++;}
tmp[j]=0;

return tmp;
}

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

למה אתה מקצה מערך כל כך גדול? כדאי לשמור את המקום בו המילה מתחילה ואת המקום בו היא מסתיימת, להקצות לפי ההפרש ביניהם(אולי להוסיף 1 או 2 בשביל ה'\0', לא חישבתי) ופשוט להעתיק מ- str+start.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

ולמה שלא תשתמש ב-strtok או ב-strtok_r? מומלץ להשתמש בספריה הסטנדרטית כשאפשר. הספריה הסטנדרטית של C היא לא כזו גדולה, ולכן כדאי להכיר אותה או לפחות לדעת לחפש.

גם ככה יש פה כמה באגים שמצאתי בדיוק בדקה של עיון בקוד:

1) לא בדקת אם str הוא NULL

2) יש באג אפשרי כאשר אורך str הוא 0 כלומר "". מה שיקרה הוא תלוי פלטפורמה.

ונראה שיש עוד כמה.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

אני מניח שאני אשים את זה אם אף אחד אחר עוד לא טרח:

שיערוך מהיר (ומדוייק באופן סביר) ל-1 חלקי שורש X עבור IEEE 754 32bit float

float InvSqrt (float x)
float InvSqrt (float x){
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
}

מועיל במיוחד כאשר חומרת ה-FP מוגבלת.

להסטוריה והסברים:

http://www.beyond3d.com/articles/fastinvsqrt/

http://www.lomont.org/Math/Papers/2003/InvSqrt.pdf

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

JAVASCRIPT

בודק איזה יש לכם ואיזה גירסה (כמו שיש עכשיו פה בפורום) :

<html>

<body>
<script type="text/javascript">
var browser=navigator.appName
var b_version=navigator.appVersion
var version=parseFloat(b_version)

document.write("Browser name: "+ browser)
document.write("<br />")
document.write("Browser version: "+ version)
</script>
</body>

</html>

ופה אם אתם רוצים שעון באתר שלכם/דפדפן :)

<html>
<head>
<script type="text/javascript">
function startTime()
{
var today=new Date()
var h=today.getHours()
var m=today.getMinutes()
var s=today.getSeconds()
// add a zero in front of numbers<10
m=checkTime(m)
s=checkTime(s)
document.getElementById('txt').innerHTML=h+":"+m+":"+s
t=setTimeout('startTime()',500)
}

function checkTime(i)
{
if (i<10)
{i="0" + i}
return i
}
</script>
</head>

<body onload="startTime()">
<div id="txt"></div>
</body>
</html>

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים