פונקציות שימושיות בכל השפות - עמוד 2 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

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


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/

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

  • 1 חודש מאוחר יותר...
  • תגובות 43
  • נוצר
  • תגובה אחרונה

שפה: 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>

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

ארכיון

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


×
  • צור חדש...