עבור לתוכן

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

Featured Replies

פורסם

לא בדיוק פונקציה, אבל 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/

  • 1 חודש מאוחר יותר...
  • תגובות 43
  • צפיות 106.7k
  • נוצר
  • תגובה אחרונה
פורסם

שפה: 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 או לא.

  • 4 שבועות מאוחר יותר...
  • 3 שבועות מאוחר יותר...
  • 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]

  • 2 חודשים מאוחר יותר...
פורסם

פונקציה ב 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 כלומר "". מה שיקרה הוא תלוי פלטפורמה.

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

  • 2 שבועות מאוחר יותר...
פורסם

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

שיערוך מהיר (ומדוייק באופן סביר) ל-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

  • 1 חודש מאוחר יותר...
פורסם

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>

ארכיון

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

דיונים חדשים