עבור לתוכן

פויינטרים c++. 3 שאלות.

Featured Replies

פורסם

שלום ושבוע טוב! שמי עידן ואני סטודנט שנה א לה. תוכנה.

נתקלתי בכמה שאלות שלא הצלחתי לפתור עקב חיסור ארוך של 4 שיעורים{מושתל כליות..:\}

אני יודע שזה לא מקצועי לבקש פתרונות אבל אינני מצליח לפתור 3 מתוך 5 שאלות. אשמח לעזרה.

*שימוש בספריות <iostream> ופונקצית strln בלבד.

אני כבר אעלה את הדרך שלי לפתרון השאלה הראשונה.

.

", תו – .

פלט – מצביע לתו שבמילה .

את כל האיברים וכתובתם אשר באינדקס 0,N,2*N,3*N,4*N עד סוף המערך

4,6,7,8,9} – הפונקציה תקבל מצביע לתחילת מערך זה.

גודל המערך : 5,

פרמטר – 2.

ערך כתובת

4 &&( כתובת המשתנה )

7 &&( כתובת המשתנה )

9 && ( כתובת המשתנה )

void CheckNumber(int* startPointer, int* endPointer, int val);

דוגמא :

מערך -

[table][tr][td] כתובות[/t]

[table][tr][td]

1000

[/td] [td]

1004

[/td] [td]

1008

[/td] [td]

1012

[/td] [td]

1014

[/td] [td]

ערך

[/td] [td]

2

[/td] [td]

3

[/td] [td]

3

[/td] [td]

3

[/td] [td]

3

[/td][/tr][/table]

הפונקציה תקבל לדוגמא – 1000,1008,3 ותחזיר במקרה זה – 2

CheckNumber(1000,1008,3) = 2;

CheckNumber(1008,1014,3) = 3;

CheckNumber(1000,1003,3) = 1;

[/td][/tr][/table]

פורסם

באמת הכל די קל וכולל התעסקות עם פוינטרים. הייתי ממליץ לך לקרוא ברשת על פוינטרים ועל אריתמטיקה של פוינטרים.

פורסם
  • מחבר

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

בשימוש בפונקציות strings אני די מצליח לפתור..אבל בלי אני ממש מתבלבל.

מישהו יכוללהראות לי איך התרגיל הראשון?

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

פורסם

הבנת את הקטע של אריתמטיקה של פוינטרים? לבצע dereferencing לפוינטר?

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

פורסם
  • מחבר

 זו בערך הדרך למציאת תו..לא האחרון ולא המיקום...אני לא מצליח בדיוק לסדר 
אותו כמו שצריך:
#include<iostream>

usingnamespace std;

int check_word(
char str[], char word[])


{
int
i=0;

while (str
!='\0')




i++;
return
i;

int
j=0;

for(j;j!='\0';j++)

return j;

char*
ptrs=&str;

char*
ptrw=&word[j];

if
(*ptrs==*ptrw)


cout<< str;

else cout<<
"noo";

return 0;

}

void
main()

{ char str[]={0};

char
word[1]={0};

int
i=0;

cout<<"
enter str ";

cin>> str;

cout<<
" enter one word";

cin>>
word;

i=check_word(str,word);}

תודה גיל!

פורסם

הקוד לא קריא ככה. תערוך את ההודעה שלך ותכניס את הקוד לתוך תגית הקוד (code.gif)

פורסם

הפונקציה צריכה לקבל מחרוזת ותו ולהחזיר מצביע (כלומר מחרוזת).

אז למה היא מקבלת שתי מחרוזות ומחזירה מספר?

הכרזת הפונקציה צריכה להיות כזאת

char* check_word( char *str, char word){

פורסם
  • מחבר
]מה אני לא עושה נכון עכשיו? אני ממש מצטער שאני שואל שאלות דבליות, אך אין לי את 
מי לשאול.

#include
<iostream>

usingnamespace std;

char* check_word (
char *str, char word)


{
int
i=0;

while (str
!='\0')




i++;
return
i;

char*
ptrs=&str;

if
(*ptrs==word)


cout<< str;

else cout<<
"noo";

return 0;

}

void
main()

{ char* check_word(char *str, char word);

cout<<"
enter str ";

cin>> str;

cout<<
" enter one word";

cin>>
word;

}

פורסם

עכשיו תנסה להסביר מה המטרה של int i;

ואם כבר החזרת אותו אחרי לולאה (מה המטרה של הלולאה הזאת?) אז למה להמשיך את הפונקציה?

רמז, צריך להחזיר char * ולא int

פורסם
  • מחבר

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

אני לא מצליח ליישם את הלוגיקה בשפת C++ אשמח אם מישהו ייתן לי תשובה.

פורסם

אוקי

קח שתי תשובות

הראשונה כמו שאמרת, ריצה על כל המחרוזת

char* check_word( char *str, char word){
char* find=NULL;
while (str[0]!='\0') {
if (str[0]==word)
find=str;
++str;
}
return find;
}

והשניה, אמרו לך שמותר להשתמש בstrlen, אז בוא נרוץ מהסוף להתחלה

char* check_word( char *str, char word){
char *Temp = str + strlen(str);

while (str!=Temp) {
if (Temp[0]==word)
return Temp;
--Temp;
}
return NULL;
}

פורסם
  • מחבר

אוקי

קח שתי תשובות

הראשונה כמו שאמרת, ריצה על כל המחרוזת

char* check_word( char *str, char word){
char* find=NULL;
while (str[0]!='\0') {
if (str[0]==word)
find=str;
++str;
}
return find;
}

והשניה, אמרו לך שמותר להשתמש בstrlen, אז בוא נרוץ מהסוף להתחלה

char* check_word( char *str, char word){
char *Temp = str + strlen(str);

while (str!=Temp) {
if (Temp[0]==word)
return Temp;
--Temp;
}
return NULL;
}

דבר ראשון תודה רבה !

עכשיו int main אני מכניס char str ,char word

char* check_word( char *str, char word){

ושוב אני נותן לה פונקציה כשאני קורא לה char* ?

פורסם
  • מחבר

כלומר :

int main()

{char str[]={0}, char word;

cout<<"enter string";

cin>> str;

cout<<" enter word";

cin>>word;

char* check_word( char *str, char word);

}

פורסם
  • מחבר

}

int main(){char* str={0}; char word={0}; check_word( str, word);

cout<<"enter string"; cin>> str;

cout<<" enter word"; cin>>word;

}

זה יותר נכון, אבל בזמן EXE מופיע לי Abort למה? איפסתי את str \word ..?

פורסם
  • מחבר

התוכנית ש"ירח אפל" העלה היא תוכנית המוצאת מיקום של תו ומדפיסה מעין תת מחרוזת מן התו הזה...איך מוצאים מיקום אחרון של תו?

יום ראשון בפורום מקבל את ההערה עם הדאבל פוסטינג. לשאלת הקוד. באיזה חלק של הקוד אני אומר לו להציג את &str המיקום? אני יודע שחסר לי המון ידע אך סה"כ ביקשתי תשובה, אני לא פה בשביל להציק לאף אחד או להקפיץ הודעות במונה שלי. סה"ב מבקש פתרון לתשובה. תודה על הסבלנות

ארכיון

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

דיונים חדשים