לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי         אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #2  
ישן 19-01-2009, 21:45
צלמית המשתמש של המממ
  המממ המממ אינו מחובר  
 
חבר מתאריך: 30.10.01
הודעות: 8,699
Follow me...
לא הבנתי
בתגובה להודעה מספר 1 שנכתבה על ידי *~.Shush.~* שמתחילה ב "אממ צריכה פונקציה ב-C .."

אם האות צריכה להיות מ A עד Z אז היא חייבת להיות גדולה.
לכן אני מניח שהתכוונת לאות מA עד Z או מ a עד z

1. חשבי את ההפרש בין a ל A ואחסני אותו במשתנה toUpper
2. אם האות גדולה מ Z חסרי ממנה את toUpper והציבי חזרה במשתנה letter
3. אם האות בletter קטנה מ A סיימי בשגיאה => הערך מחוץ לטווח
4. אם האות בletter גדולה מ Z סיימי בשגיאה => הערך מחוץ לטווח
5. הגדירי משתנה count=0
6. עבור כל אות במחרוזת
6.1 אם האות גדולה מZ חסרי ממנה את toUpper והציבי במשתנה temp
6.2 אם האות במשתנה temp שווה לאות בletter הגדילי את count ב 1
7. החזירי את הערך count


*עריכה*
אני מניח שהמחרוזות מקודדות בASCII
http://www.ascii.cl/
_____________________________________
_________________________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה
אזהרה: משרד הבריאות קובע כי העישון מזיק לבריאות !
תראו, אפילו החייזר נהיה ירוק מזה


נערך לאחרונה ע"י המממ בתאריך 19-01-2009 בשעה 21:52.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #3  
ישן 19-01-2009, 23:22
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 1 שנכתבה על ידי *~.Shush.~* שמתחילה ב "אממ צריכה פונקציה ב-C .."

קוד PHP:
 #include <stdio.h>

int Count_Letter (charStrchar letter);
int main ()
{
    
char string[10],letter;
    
printf ("Enter a string and a letter\n");
    
scanf ("%s %c",string,&letter);
    
printf ("\nCount is %d\n",Count_Letter (stringletter));
    
fflush(stdin);
    
scanf ("%c",&letter);
}

int Count_Letter (charStrchar letter)
{
    if ((
letter >= 'A' && letter <= 'Z') || (letter >= 'a' && letter <= 'z'))
    {
        
int i=0count=0;
        while (
Str[i] != '\0')
        {
            if ((
Str[i] >= 'a' && Str[i] <= 'z') || (Str[i] >= 'A' && Str[i] <= 'Z'))
            {
                if (
Str[i] == letter)
                    
count++;
                else
                {
                    if (
letter <= 'Z')
                    {
                        if (
Str[i] == letter 32)
                            
count++;
                    }
                    else                    
                        if (
letter >= 'a')
                        {
                            if (
Str[i] == letter 32)
                                
count++;
                        }
                }
            }
            else
                return 
0;
            
i++;
        }
        return 
count;
    }
    else
        return 
0;


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

עריכה:
הערה - המספר "32" הוא ההפרש בין A ל- a.
אם את רוצה להראות שהבנת מה המשמעות של המספר הזה (שאינו שרירותי), תוכלי לכתוב במקום "32":
'a' - 'A'
ובמקום 32-
'A' - 'a'
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com


נערך לאחרונה ע"י Narxx בתאריך 19-01-2009 בשעה 23:31.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #4  
ישן 20-01-2009, 05:44
צלמית המשתמש של *~.Shush.~*
  משתמשת נקבה *~.Shush.~* *~.Shush.~* אינו מחובר  
 
חבר מתאריך: 10.10.06
הודעות: 64
בתגובה להודעה מספר 3 שנכתבה על ידי Narxx שמתחילה ב "[php] #include <stdio.h> int..."

וואו, תודה על התגובה המהירה !

כמה שאלות מהירות:
קוד PHP:
 scanf ("%s %c",string,&letter); 

לא אמור להיות & ליד string ?
מה זה fflush(stdin); ?

משהו נראה לי קצת מוזר כאן..
קוד PHP:
 int main () {
    
char string[10],letter;
    
printf ("Enter a string and a letter\n");
    
scanf ("%s %c",string,&letter);
    
printf ("\nCount is %d\n",Count_Letter (stringletter));
    
fflush(stdin);
    
scanf ("%c",&letter);


בסוף יש סוגריים מסולסלות { שסוגרות את הסוגריים של int main () {. הסוגריים של int main לא אמורות להסגר רק בסוף הקוד?

וגם
קוד PHP:
 int Count_Letter (charStrchar letter); 

ניתן להכריז ככה על משתנה מחוץ ל int main ? אם זאת הפונקציה, אז לא אמורים להיות סוגריים מסולסות אחרי ההכרזה שלה?

שוב תודה רבה!

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

נערך לאחרונה ע"י *~.Shush.~* בתאריך 20-01-2009 בשעה 05:51.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #5  
ישן 20-01-2009, 09:39
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 4 שנכתבה על ידי *~.Shush.~* שמתחילה ב "וואו, תודה על התגובה המהירה..."

כמה תשובות זריזות.
1. כשסורקים לתוך מערך (מחרוזת היא מקרה פרטי של מערך) אין חובה להשתמש ב &. ניתן להשתמש ב & בסריקה למחרוזת, זו לא שגיאה, אבל כיוון שמערך הוא בעצמו מצביע - אין צורך לציין את הכתובות של המערך (הערך עצמו הוא הכתובת לתא הראשון).
נשמע מסובך?

2. מה זה fflush... קורה שבמהלך הרצת תוכנית, יש קלטים שנשמרים בזיכרון ויוצאים ברגעים לא מתוכננים.
כאשר אנחנו מקלידים במקלדת קלט מסויים ומכניסים אותו לתוכנית שלנו, הוא נקלט במשתנים המתאימים, אך לפעמים חלקים ממנו נשארים בזיכרון ו'יוצאים' בחזרה לתוכנית ברגעים לא מתוכננים. זה יכול בפועל לגרום לקבלת קלטים לא רצויים.
זה לא משהו שאפשר לצפות. יש לי קוד שכתבתי שעובד מצויין 3-4 פעמים ואז בפעם הבאה שאני מזין קלט (באותה הלולאה שעבדה מצויין 4 פעמים קודם לכן) הכל מתחרבש... פתאום יש לי גלישה מגודל מערך, או איזו לולאה אינסופית...
הפתרון הוא לפני הסריקה לבצע ניקוי של הזיכרון הזה ע"י פונקציה fflush כפי שרשמתי אותה מעלה.
חפשי את המחרוזת (fflush(stdin בגוגל, אני בטוח שתמצאי עוד מידע עליה.

3-4. שימי לב שהסוגריים שציטטת שייכות לפונקציה int main.
הסוגריים שבסוף הקוד (השורה האחרונה ביותר) הם הסוגריים שסוגרים את הפונקציה int Count_Letter.
אין שום קשר בין הפונצקיות, מלבד העובדה שאני משתמש בשניה בתוך הראשונה.
לפי השאלה הרביעית שלך, אני מבין שאת רגילה לכתוב את הפונצקיות מעל ה main ולקנח בסוף הקוד שלך עם הפונקציה main.
כאשר את מממשת את הפונקציה מעל ה main, את לא צריכה להצהיר עליה כיוון שהיא מוצהרת מטעם מימושה. אבל, אם את רוצה לממש את הפונקציה מתחת ל main, את צריכה פעם אחת להצהיר עליה מעל ה main (כדי שהיא תדע שקיימת פונקציה כזו בכלל), ואז מתחת ל main את מממשת מה שאת רוצה.

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

אם יש שאלות, אשמח לענות.
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com


נערך לאחרונה ע"י Narxx בתאריך 20-01-2009 בשעה 09:42.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #8  
ישן 20-01-2009, 16:03
צלמית המשתמש של *~.Shush.~*
  משתמשת נקבה *~.Shush.~* *~.Shush.~* אינו מחובר  
 
חבר מתאריך: 10.10.06
הודעות: 64
בתגובה להודעה מספר 5 שנכתבה על ידי Narxx שמתחילה ב "כמה תשובות זריזות. 1...."

הפונקציה הזאת היא בעצם חלק מתכנית יותר גדולה שמופיעה כאן:
http://webcourse.cs.technion.ac.il/...hw/WCFiles/Q1.c
(אם אני מעתיקה את הקוד לפורום התגובה די מתחרבשת..


כאשר כאן:

קוד PHP:
 /*Q1 Part A: Count_Letter*/
int Count_Letter (charStrchar letter)
{
    
/*Add the relevant changes*/
    /**************************/
 
 



אני מכניסה את הקוד לפונקציה הראשונה, אז בעצם החלק הרלוונטי בשבילי הוא:
קוד PHP:
 if ((letter >= 'A' && letter <= 'Z') || (letter >= 'a' && letter <= 'z'))
    {
        
int i=0count=0;
        while (
Str[i] != '\0')
        {
            if ((
Str[i] >= 'a' && Str[i] <= 'z') || (Str[i] >= 'A' && Str[i] <= 'Z'))
            {
                if (
Str[i] == letter)
                    
count++;
                else
                {
                    if (
letter <= 'Z')
                    {
                        if (
Str[i] == letter 32)
                            
count++;
                    }
                    else                    
                        if (
letter >= 'a')
                        {
                            if (
Str[i] == letter 32)
                                
count++;
                        }
                }
            }
            else
                return 
0;
            
i++;
        }
        return 
count;
    }
    else
        return 
0

נכון?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #9  
ישן 20-01-2009, 19:37
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 8 שנכתבה על ידי *~.Shush.~* שמתחילה ב "הפונקציה הזאת היא בעצם חלק..."

קודם כל - זה לא יפה להעתיק
הרעיון הוא שתביני מה נעשה כדי שתדעי לעשות בעצמך

ולעניינינו - כן, את פשוט מעתיקה את התוכן של הפונקציה לתוך האיזור שכתוב "add relavent changes".

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

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

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

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #10  
ישן 20-01-2009, 19:57
צלמית המשתמש של *~.Shush.~*
  משתמשת נקבה *~.Shush.~* *~.Shush.~* אינו מחובר  
 
חבר מתאריך: 10.10.06
הודעות: 64
בתגובה להודעה מספר 9 שנכתבה על ידי Narxx שמתחילה ב "קודם כל - זה לא יפה להעתיק..."

ציטוט:
במקור נכתב על ידי Narxx
קודם כל - זה לא יפה להעתיק
הרעיון הוא שתביני מה נעשה כדי שתדעי לעשות בעצמך

ולעניינינו - כן, את פשוט מעתיקה את התוכן של הפונקציה לתוך האיזור שכתוב "add relavent changes".

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

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

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


אוקיי, שים לב מה ניסיתי

קוד PHP:
 #include <stdio.h>

/*Q1 Part A: Count_Letter*/
int Count_Letter (charStrchar letter)
{
    if ((
letter >= 'A' && letter <= 'Z') || (letter >= 'a' && letter <= 'z'))
    {
        
int i=0count=0;
        while (
Str[i] != '\0')
        {
            if ((
Str[i] >= 'a' && Str[i] <= 'z') || (Str[i] >= 'A' && Str[i] <= 'Z'))
            {
                if (
Str[i] == letter)
                    
count++;
                else
                {
                    if (
letter <= 'Z')
                    {
                        if (
Str[i] == letter 32)
                            
count++;
                    }
                    else                    
                        if (
letter >= 'a')
                        {
                            if (
Str[i] == letter 32)
                                
count++;
                        }
                }
            }
            else
                return 
0;
            
i++;
        }
        return 
count;
    }
    else
        return 
0;

}
 
 

/******MAIN******/
void main()
{
    
int i;
    
/*Q1A*/
    
printf("%d\n",Count_Letter("Jim loves pizza",'z'));/*2*/
    
printf("%d\n",Count_Letter("Jim loves pizza",'Z')); /*2*/
    
printf("%d\n",Count_Letter("I can't believe it's not butter!!!",'y')); /*0*/
    
printf("%d\n",Count_Letter("I can't believe it's not butter!!!",'!')); /*-1*/



והפלט הוא משום מה רק אפסים, סימן שמשהו מתפקשש באיזשהו מקום..
ולשאלות קטנות:
מה המשמעות של Str[i] != '\0' ? סוף מחרוזת?
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #11  
ישן 20-01-2009, 20:58
  Dragonion Dragonion אינו מחובר  
 
חבר מתאריך: 22.08.08
הודעות: 310
בתגובה להודעה מספר 10 שנכתבה על ידי *~.Shush.~* שמתחילה ב "[QUOTE=Narxx]קודם כל - זה לא..."

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

הנה קוד שנראה לי קצת יותר יעיל
קוד PHP:
 int Count_Letter (charStrchar letter)
{
    
char opposite;
    
    if(
letter >= 'A' && letter <= 'Z'opposite letter 32;
    else if(
letter >= 'a' && letter <= 'z'opposite letter 32;
    else return -
1;

    
int i=0count=0;
    
    while (
Str[i] != '\0')
    {
        if(
Str[i] == letter || Str[i] == oppositecount++;
        
i++;
    }
    
    return 
count;



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

נערך לאחרונה ע"י Dragonion בתאריך 20-01-2009 בשעה 21:11.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #12  
ישן 20-01-2009, 21:11
צלמית המשתמש של *~.Shush.~*
  משתמשת נקבה *~.Shush.~* *~.Shush.~* אינו מחובר  
 
חבר מתאריך: 10.10.06
הודעות: 64
בתגובה להודעה מספר 11 שנכתבה על ידי Dragonion שמתחילה ב "הבעיה היא הבדיקה אם האות של..."

ציטוט:
במקור נכתב על ידי Dragonion
הבעיה היא הבדיקה אם האות של המחרוזת נמצאת בתוך הטווח.
ברגע שהאות הנבדקת שווה למשהו שלא בטווח (במקרה הזה - רווח, ששווה ל 32), הפונקצייה מחזירה 0. פשוט תמחקי את התנאי הזה כי הוא במילא לא מועיל וזה יפעל.

הנה קוד שנראה לי קצת יותר יעיל


קוד PHP:
 int Count_Letter (charStrchar letter)
{
    
char opposite;
 
    if(
letter >= 'A' && letter <= 'Z'opposite letter 32;
    else if(
letter >= 'a' && letter <= 'z'opposite letter 32;
    else return -
1;
 
    
int i=0count=0;
 
    while (
Str[i] != '\0')
    {
        if(
Str[i] == letter || Str[i] == oppositecount++;
        
i++;
    }
 
    return 
count;






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


עובד מצויין תודה!
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #15  
ישן 20-01-2009, 23:48
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 14 שנכתבה על ידי *~.Shush.~* שמתחילה ב "[QUOTE=Narxx]שימי לב שאת..."

את לא יכולה להחזיר ERROR*, כיוון שהפונקציה מוגדרת כמי שמחזירה int (מספר שלם בלבד).
אבל, את יכולה להתייחס ל int הזה במיין כפי שאת רוצה.
למשל, אם קיבלת שגיאה (זאת אומרת, הפונקציה החזירה 1-), תדפיסי ERROR ב main:
קוד PHP:
 int main ()
{
    
int result Count_Letter ("bla bla bla"b);
   if (
result == (-1)) // also can write: if (result < 0)
       
printf ("Input error!\n");
   else
       
printf ("%d",result);


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

* מאוחר יותר בטח תלמדו לעבוד עם enum ואז תראי שכן אפשר להחזיר "ERROR" אבל זה למעשה יהיה int בתחפושת... אבל חבל סתם להקדים את המאוחר
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #18  
ישן 21-01-2009, 15:01
צלמית המשתמש של *~.Shush.~*
  משתמשת נקבה *~.Shush.~* *~.Shush.~* אינו מחובר  
 
חבר מתאריך: 10.10.06
הודעות: 64
בתגובה להודעה מספר 17 שנכתבה על ידי Narxx שמתחילה ב "נכון... רק נחכה שהיא תלמד..."

ציטוט:
במקור נכתב על ידי Narxx
נכון... רק נחכה שהיא תלמד להשתמש ב enum או define ואז היא תורשה להשתמש בזה בתרגיל שלה


אין לי מושג מה זה enum אבל ב define אני כן יכולה להשתמש
השאלה היא מה זה enum ואיך בדיוק הוא מקביל ל define?

למשל בקטע קוד הזה:

קוד PHP:
 if(letter >= 'A' && letter <= 'Z'opposite letter 32;
    else if(
letter >= 'a' && letter <= 'z'opposite letter 32;
    else return -
1


אני יכולה לעשות define בצורה הבאה על מנת שאקבל הודעת שגיאה?
קוד PHP:
 #DEFINE ERROR -1  
  
    
if(letter >= 'A' && letter <= 'Z'opposite letter 32;
    else if(
letter >= 'a' && letter <= 'z'opposite letter 32;
    else return -
1


או שאני עושה פה סלט גדול .. ?

נערך לאחרונה ע"י *~.Shush.~* בתאריך 21-01-2009 בשעה 15:04.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #19  
ישן 21-01-2009, 16:04
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 18 שנכתבה על ידי *~.Shush.~* שמתחילה ב "[QUOTE=Narxx]נכון... רק נחכה..."

לא סלט בכלל... את יכולה לעשות בדיוק מה שכתבת:
קוד PHP:
 #define ERROR -1 

ואז להשתמש במילה ERROR במקום המספר 1- בצורה הבאה:
קוד PHP:
 return ERROR

למה זה טוב? פשוט נוח להחזיר מילים במקום להחזיר מספרים (מי זוכר ש 1- זו הודעת שגיאה? יותר קל לכתוב להחזיר "שגיאה").
מבחינת ה main - החזרת int ולא מילה... זאת אומרת שמבחינת התוכנית שלך זה בדיוק אותו הדבר, פשוט השתמשת במילה במקום מספר רק בשביל הנוחות בתכנות.
enum עובד באותו האופן של define.

זהירות - ספויילר!

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

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


נערך לאחרונה ע"י Narxx בתאריך 21-01-2009 בשעה 16:20.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #20  
ישן 21-01-2009, 19:09
צלמית המשתמש של *~.Shush.~*
  משתמשת נקבה *~.Shush.~* *~.Shush.~* אינו מחובר  
 
חבר מתאריך: 10.10.06
הודעות: 64
בתגובה להודעה מספר 19 שנכתבה על ידי Narxx שמתחילה ב "לא סלט בכלל... את יכולה לעשות..."

ציטוט:
במקור נכתב על ידי Narxx
לא סלט בכלל... את יכולה לעשות בדיוק מה שכתבת:
קוד PHP:
 #define ERROR -1 

ואז להשתמש במילה ERROR במקום המספר 1- בצורה הבאה:
קוד PHP:
 return ERROR

למה זה טוב? פשוט נוח להחזיר מילים במקום להחזיר מספרים (מי זוכר ש 1- זו הודעת שגיאה? יותר קל לכתוב להחזיר "שגיאה").
מבחינת ה main - החזרת int ולא מילה... זאת אומרת שמבחינת התוכנית שלך זה בדיוק אותו הדבר, פשוט השתמשת במילה במקום מספר רק בשביל הנוחות בתכנות.
enum עובד באותו האופן של define.

זהירות - ספויילר!

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

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


בשביל שהמחרוזת תקבל גם סימני קריאה מספיק לי לערוך את תנאי ה IF הבא?
קוד PHP:
 if ((Str[i] >= 'a' && Str[i] <= 'z') || (Str[i] >= 'A' && Str[i] <= 'Z') || (Str[i] == ' ') || (Str[i] == '!')) 


ואם למשל במצב של שגיאה, הייתי רוצה להחזיר מהפונקציה שסופרת את מספר האותיות חזרה ל main לא מספר אלא שורת טקסט כלשהי, מבחינה תחבירית מותר לעשות את זה?
נגיד
DEFINE ERROR wrong input commrad ?

נערך לאחרונה ע"י *~.Shush.~* בתאריך 21-01-2009 בשעה 19:11.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #21  
ישן 21-01-2009, 19:47
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 20 שנכתבה על ידי *~.Shush.~* שמתחילה ב "[QUOTE=Narxx]לא סלט בכלל......"

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

אין שום בעיה להחזיר מהפונצקיה שורת טקסט שתגיד "שגיאה, קלט לא תקין!" או משהו בסגנון גם באמצעות define.
את צריכה להבין ש define זה בעצם "מחליף משהו אחד במשהו אחר".
כך שאם אני אכתוב את הקוד הבא:
קוד PHP:
 #include <stdio.h>
#define ERROR "bla bla"

int main ()
{
    
printf("%s"ERROR);
    
char x;
    
scanf ("%c",&x);


אני אקבל על המסך את הכיתוב bla bla (תקמפלי ותריצי...).
באותו האופן, אני יכול להחזיר את הערך הזה מפונקציה:
קוד PHP:
 #include <stdio.h>
#define ERROR "bla bla"

charfunc1 ();

int main ()
{
    
printf("%s"func1());
    
char x;
    
scanf ("%c",&x);
}

charfunc1 ()
{
    return 
ERROR;


התוצאה תהיה (באופן מפתיע) זהה לחלוטין... יציג על המסך bla bla.

שימי לב רק שבקוד שלך, הפונקציה מחזירה int כי ככה הגדירו לך.
את לא יכולה להחזיר מחרוזת אם הפונקציה מוגדרת להחזיר int.
כך שבמקרה שלך, ה main ידפיס בכל מקרה 1- אם התבצעה שגיאה - אבל זה בסדר... ככה הם רצו שתעשי בתרגיל.
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #23  
ישן 21-01-2009, 14:59
צלמית המשתמש של *~.Shush.~*
  משתמשת נקבה *~.Shush.~* *~.Shush.~* אינו מחובר  
 
חבר מתאריך: 10.10.06
הודעות: 64
בתגובה להודעה מספר 15 שנכתבה על ידי Narxx שמתחילה ב "את לא יכולה להחזיר ERROR*,..."

ציטוט:
במקור נכתב על ידי Narxx
את לא יכולה להחזיר ERROR*, כיוון שהפונקציה מוגדרת כמי שמחזירה int (מספר שלם בלבד).
אבל, את יכולה להתייחס ל int הזה במיין כפי שאת רוצה.
למשל, אם קיבלת שגיאה (זאת אומרת, הפונקציה החזירה 1-), תדפיסי ERROR ב main:
קוד PHP:
 int main ()
{
    
int result Count_Letter ("bla bla bla"b);
if (
result == (-1)) // also can write: if (result < 0)
     
printf ("Input error!\n");
else
     
printf ("%d",result);


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

* מאוחר יותר בטח תלמדו לעבוד עם enum ואז תראי שכן אפשר להחזיר "ERROR" אבל זה למעשה יהיה int בתחפושת... אבל חבל סתם להקדים את המאוחר


אז זהו, שאסור לנו לגעת בפונקצית main. הכל צריך להתבצע בתור הפונקציה count_letter עצמה.
(הנחיית התרגיל)
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #29  
ישן 27-01-2009, 20:46
צלמית המשתמש של *~.Shush.~*
  משתמשת נקבה *~.Shush.~* *~.Shush.~* אינו מחובר  
 
חבר מתאריך: 10.10.06
הודעות: 64
בתגובה להודעה מספר 1 שנכתבה על ידי *~.Shush.~* שמתחילה ב "אממ צריכה פונקציה ב-C .."

היי :-) חזרתי עם שאלות לגבי פונקציה נוספת:

השאלה:


[התמונה הבאה מגיעה מקישור שלא מתחיל ב https ולכן לא הוטמעה בדף כדי לשמור על https תקין:
http://img140.imageshack.us/img140/7757/28899585iu3.jpg]


הקוד:
קוד PHP:




<DIV dir=ltr align=left>#include <stdio.h>



int Count_Letter (char* Str, char letter)
{
#define ERROR -1
if ((letter >= 'A' && letter <= 'Z') || (letter >= 'a' && letter <= 'z'))
{
int i=0, count=0;
while (Str[i] != '\0')
{

if (Str[i] == letter)
{
count++;
}
else
{
if (letter <= 'Z')
{
if (Str[i] == letter + 32)
{
count++;
}
}
else
{
if (letter >= 'a')
{
if (Str[i] == letter - 32)
{
count++;
}
}
}
}
i++;
} // end while
return count;
} // end first IF
else
{
return ERROR;
}
}
/* function 1
returns -1 as error. */

char Popular_Letter (char* Str)
{

int i, countAll[26], mostUsed[2] = {0, -1};

// Count letters
for(i=0; i<26; i++){
countAll[i] = Count_Letter (Str, 'A'+i);
if( mostUsed[0] < countAll[i] ){
mostUsed[0] = countAll[i];
mostUsed[1] = i;
}
}

// This only accrues if only non alphabetical characters exist in the string
if( mostUsed[1] == -1 )
mostUsed[1] = '!'-'A';

return mostUsed[1]+'A';
}





char Count_Word (char* Str, int n)
{
int i=0;
int space=0;
char *temp=0;
char Letter;
while ( /*(Str[i] != '\0') &&*/ (space <= n) )
{

if (Str[i] == ' ')
{
space++;
}

if (space == n-1){
temp = Str+i+1;
}

if (space == n ){
Str[i]='\0';
Letter = Popular_Letter (temp); }

i++;

}

return Letter;

}








/******MAIN******/
void main()
{
int i;
/*Q1A*/
printf("%d\n",Count_Letter("Jim loves pizza",'z'));/*2*/
printf("%d\n",Count_Letter("Jim loves pizza",'Z')); /*2*/
printf("%d\n",Count_Letter("I can't believe it's not butter!!!",'y')); /*0*/
printf("%d\n",Count_Letter("I can't believe it's not butter!!!",'!')); /*-1*/

/*Q1B*/
printf("%c\n",Popular_Letter("Jim loves pizzzza")); /*z*/
printf("%c\n",Popular_Letter("Jim loves pizza")); /*i*/


/*Q1C*/
printf("%c\n",Count_Word("aaa abab ccccc",1)); /* 'A' */
printf("%c\n",Count_Word("aaa abab ccccc",2)); /* 'A' */
printf("%c\n",Count_Word("aaa abab
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #31  
ישן 28-01-2009, 13:23
צלמית המשתמש של *~.Shush.~*
  משתמשת נקבה *~.Shush.~* *~.Shush.~* אינו מחובר  
 
חבר מתאריך: 10.10.06
הודעות: 64
בתגובה להודעה מספר 30 שנכתבה על ידי Narxx שמתחילה ב "אני רואה את התרגיל, אבל אני..."

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

סעיפים א' ו-ב' עובדים, הבעיה היא בסעיף ג' (צבוע בכחול שונה) ובפרט בחלק הצבוע באדום בסעיף ג'. ההודעת שגיאה לא ממש ברורה, אני משום מה כבר לא מקבלת אותה על המחשב שלי גם כן.. אבל בתאוריה מה שסעיף ג' אמור לעשות זה לספור את מספר הרווחים וכשהוא מגיע לרווח שלפני המילה המתאימה (נגיד בדוגמא שלמעלה n=5 אז כשהוא מגיע לרווח הרביעי) הוא 'מסמן' בפוינטר את האות הראשונה של אותה מילה וממשיך לרוץ עד הרווח שאחרי המילה, אותה הוא מחליף בבאקסלאש 0 כדי שזה יסומן בתור הסוף. ככה המילה 'מסומנת', ועליה מופעלת הפונקציה השנייה שסופרת את האות הכי פופולארית באותה מילה ומחזירה למשתנה Letter את אותה אות פופולארית וזו מודפסת.
אבל.. לא עובד :\



#include <stdio.h>






int Count_Letter (char* Str, char letter)
{
#define ERROR -1
if ((letter >= 'A' && letter <= 'Z') || (letter >= 'a' && letter <= 'z'))
{
int i=0, count=0;
while (Str[i] != '')
{

if (Str[i] == letter)
{
count++;
}
else
{
if (letter <= 'Z')
{
if (Str[i] == letter + 32)
{
count++;
}
}
else
{
if (letter >= 'a')
{
if (Str[i] == letter - 32)
{
count++;
}
}
}
}
i++;
} // end while
return count;
} // end first IF
else
{
return ERROR;
}
}





/* function 1

returns -1 as error. */







char Popular_Letter (char* Str)
{

int i, countAll[26], mostUsed[2] = {0, -1};

// Count letters
for(i=0; i<26; i++){
countAll[i] = Count_Letter (Str, 'A'+i);
if( mostUsed[0] < countAll[i] ){
mostUsed[0] = countAll[i];
mostUsed[1] = i;
}
}

// This only accrues if only non alphabetical characters exist in the string
if( mostUsed[1] == -1 )
mostUsed[1] = '!'-'A';

return mostUsed[1]+'A';
}

























char Count_Word (char* Str, int n)

{





int i=0;

int space=0;
char *temp=0;
char Letter;





while ( /*(Str[i] != '') &&*/ (space <= n) )

{

if (Str[i] == ' ')
{
space++;
}

if (space == n-1){
temp = Str+i+1;
}

if (space == n ){
Str[i]='';
Letter = Popular_Letter (temp); }

i++;

}

return Letter;









}


















/******MAIN******/
void main()
{
int i;





/*Q1A*/

printf("%dn",Count_Letter("Jim loves pizza",'z'));/*2*/
printf("%dn",Count_Letter("Jim loves pizza",'Z')); /*2*/
printf("%dn",Count_Letter("I can't believe it's not butter!!!",'y')); /*0*/
printf("%dn",Count_Letter("I can't believe it's not butter!!!",'!')); /*-1*/

/*Q1B*/
printf("%cn",Popular_Letter("Jim loves pizzzza")); /*z*/
printf("%cn",Popular_Letter("Jim loves pizza")); /*i*/





<FONT color=#ff0000> /*Q1C*/
printf("%c\n",Count_Word("aaa abab ccccc",1)); /* 'A' */
printf("%c\n",Count_Word("aaa abab ccccc",2)); /* 'A' */
printf("%c\n",Count_Word("aaa abab

נערך לאחרונה ע"י *~.Shush.~* בתאריך 28-01-2009 בשעה 13:33.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #32  
ישן 29-01-2009, 11:01
צלמית המשתמש של Narxx
  משתמש זכר Narxx Narxx אינו מחובר  
 
חבר מתאריך: 21.12.04
הודעות: 30,020
בתגובה להודעה מספר 31 שנכתבה על ידי *~.Shush.~* שמתחילה ב "אני לא רוצה שתעשו לי את..."

נסי בפעם הבאה להעתיק לתוך תגית PHP כמו שצריך... זה קשה לבצע את כל ההזחות מחדש.
בכל מקרה, הנה פונקציה שאני בניתי שעובדת עם הקוד שלך:
קוד PHP:
 char Count_Word (charStrint n)
{
    
int i=0,j;
    
int space=0;
    
char word[80];
    while (
space n-)
    {
        if (
Str[i] == ' ')
            
space++;
        
i++;
    }
    for (
j=0; (Str[i] != '\0') && (Str[i] != ' '); i++,j++)
    {
        
word[j] = Str[i];
    }
    
word[j] = '\0';
    return 
Popular_Letter (word);


מה שהיא עושה זה למעשה בונה מחרוזת בגודל 80, ולתוך המחרוזת הזו היא מעתיקה את המילה ה nית (כפי שנשלח ב main) ושולחת את המחרוזת הזו לפונקציה popular letter, שעובדת כמו שצריך (לטענתך).
בהתחלה ניסיתי להשתמש במחרוזת שקיבלת (Str) עצמה, אבל מסתבר שאסור לי לשנות אותה (שגיאת זמן-ריצה). כנראה שהיא const או משהו מטעם יצירתה כפי שהיא ב main.
למה גודל 80? סתם שיהיה מספיק גדול להכיל מילים ארוכות. יכלתי גם להשתמש במילה בגודל 20 וזה עדיין היה עובד כי אין לך מילים כל כך ארוכות בתרגיל.
_____________________________________
בברכה, מתן.
www.MatanNarkiss.com


נערך לאחרונה ע"י Narxx בתאריך 29-01-2009 בשעה 11:03.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 16:19

הדף נוצר ב 1.81 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2020 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר