פורסם 2012 ביוני 1713 שנים מחבר אם הייתי מבין, לא הייתי שואל... :s05: אני צריך להפוך מספרים למילים, לדוגמא: 1 = one 17 = seventeen אני פשוט צריך הסבר על מצביעים למערך דו ממדי של char אני לא מצליח להבין איך זה עובד... אגב החלטתי לא להעביר את המערך של המילים לפונקציה... אלא לבנות את המערך כבר בתוך הפונקציה (numberToLetter)
פורסם 2012 ביוני 1713 שנים תחשוב על מערך דו מימדי כמערך חד מימדי ארוך:|__|__|__|__||__|__|__|__||__|__|__|__|11 10 9 8 7 6 5 4 3 2 1 0בעצם מדובר במערך רגיל באורך 12 המייצג מערך דו מימדי בגודל 3X4 כאשר תאים 0-3 הם השורה הראשונה, 4-7 השורה השנייה וכולי.אתה יכול להסתכל על תאים 0,4,8 כעל הטור הראשון, הבנת את הרעיון.עכשיו תחשוב איך אתה מתרגם את ההוראה [2][2]arr לגישה לתא הרצוי במערך הזה, כלומר מצא את j עבורו [2][2]arr[j]=arr
פורסם 2012 ביוני 1713 שנים ^^שים לב שכשאתה שם בפורום i בתוך סוגריים מרובעים אז זה הופך את הכתב למוטה. עדיף שתשתמש ב-j או שפשוט תשים את הקוד בתוך טג קוד.לפותח הת'רד:http://hwzone.co.il/community/index.php?topic=534140.0
פורסם 2012 ביוני 1713 שנים מחבר אוקיי תודה... אני מבין איך נראה מערך דו ממדי... אני פשוט לא מבין איך להעתיק לשם מילה(string) או שכדאי להעתיק אות אות (char) אגב ראיתי מה שרשום בתרד השני.... האם כדאי לי באמת לקחת char משנה כדי להעתיק לשם את המילים ואז להעתיק למערך? ואיך בכלל להכניס אותו לתוך המערך? כי אני לא מצליח.. תודה על העזרה!
פורסם 2012 ביוני 1713 שנים השאלה היא למה בכלל אתה צריך מערך דו מימדי. הרבה יותר טוב יהיה אם תשתמש במערך של מצביעים, ואז תוכל לדאוג שכל תא במערך יצביע למחרוזת כלשהי.
פורסם 2012 ביוני 1713 שנים מחבר תוכל להסביר לי כיצד? או שיש לך איזה מדריך שיעזור לי? פשוט חשבתי שב char ככה הכי נוח לעבוד..
פורסם 2012 ביוני 1713 שנים מחבר טוב אני חושב שהבנתי תגיד לי אם זה מה שהתכוונת: if(numbers[i]==0) /* when the number is 0 */ { strcpy(letters[i],"zero"); } זאת השיטה כולה:int numberToLetter(int numbers[]){ int i=0,ahadot,asarot,j=0,num=0; char letters[100][20]; char firstWord[11][6]={"zero","one","two","three","four","five","six","seven","eight","nine","ten"}; char tenPlus[10][10]={"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","seventeen","eighteen","nineteen"}; char secondWord[10][8]={"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"}; while(numbers[i]!=NULL) { if(numbers[i]>0) /* if number between 0-10 */ { num=numbers[i]; strcpy(letters[i],firstWord[num]); } if(numbers[i]>10) { num=numbers[i]; ahadot=num%10; asarot=num/10; if(ahadot==0) strcpy(letters[i],secondWord[asarot-1]); else scanf(letters[i],"%s" "%s",secondWord[asarot-1],firstWord[ahadot-1]); } i++; }}
פורסם 2012 ביוני 1813 שנים מחבר טוב הצליח להתקמפל והכל אבל עכשיו הוא לא מצליח לפתוח את הקבצים...אני חושב כי ניסיתי להגדיר אותם עוד לפני התוכנית...האם יש אפשרות להעביר את הקבצים לפונקציה אחרת?
פורסם 2012 ביוני 1813 שנים מחבר הצלחתי לקמפל, אבל הוא לא מצליח לפתוח את הקבצים... צריך עזרה!!#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>int numberToLetter();int main(int argc, char *argv[]){ FILE *inputf, *outputf; int i=0; int numbers[100]={0}; if(argc > 2) /* more then 2 names */ { fprintf(stderr,"Eror! You cant enter more then 2 names.\n Goodbye!\n"); exit(0); } if(argc==0) /* no names */ { if(!(inputf=fopen("standardInput.txt","r"))) { fprintf(stderr,"Cannot open standardInput file\n"); exit(0); } if(!(outputf=fopen("standardOutput.txt","w"))) { fprintf(stderr,"Cannot open standardOutput file\n"); exit(0); } while(!feof(inputf)) /* put all the numbers from the input file to the arry */ { fscanf(inputf,"%d",&numbers[i]); i++; } } if(argc==1) /* if one name */ { if(!(inputf=fopen(*(argv+1),"r"))) { fprintf(stderr,"Cannot open input file\n"); exit(0); } if(!(outputf=fopen("standardOutput.txt","w"))) { fprintf(stderr,"Cannot open standardOutput file\n"); exit(0); } while(!feof(inputf)) /* put all the numbers from the input file to the arry */ { fscanf(inputf,"%d",&numbers[i]); i++; } } if(argc==2) /* if two names */ { if(!(inputf=fopen(*(argv+1),"r"))) { fprintf(stderr,"Cannot open input file file\n"); exit(0); } if(!(outputf=fopen(*(argv+2),"w"))) { fprintf(stderr,"Cannot open output file\n"); exit(0); } while(!feof(inputf)) /* put all the numbers from the input file to the arry */ { fscanf(inputf,"%d",&numbers[i]); i++; } } numberToLetter(numbers,outputf,inputf); fclose(inputf); fclose(outputf); return 0;}int numberToLetter(int numbers[],FILE *out){ int i=0,ahadot,asarot,num=0; char letters[100][20]; char firstWord[11][6]={"zero","one","two","three","four","five","six","seven","eight","nine","ten"}; char tenPlus[10][10]={"Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","seventeen","eighteen","nineteen"}; char secondWord[10][8]={"Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"}; while(!numbers[i]) { if(numbers[i]>0 && numbers[i]<11) /* if number between 0-10 */ { num=numbers[i]; strcpy(letters[i],firstWord[num]); } if(numbers[i]>10) { num=numbers[i]; ahadot=num%10; asarot=num/10; if(ahadot==0) strcpy(letters[i],tenPlus[asarot-1]); else scanf(letters[i],"%s" "%s",secondWord[asarot-1],firstWord[ahadot-1]); } i++; } i=0; while(letters[i]!=NULL) { fprintf(out,"%s",letters[i]); i++; }return 0;}
פורסם 2012 ביוני 1813 שנים אתה בטוח שהקובץ שאתה פותח לקריאה קיים (בתיקייה שממנה התכנית רצה)?בכל מקרה, במקרה של שגיאה בפונקציה סטנדרטית (כמו fopen) עדיף להדפיס את הודעת השגיאה באמצעות הפונקציה perror, כי זה גם ידפיס את הודעת השגיאה שמערכת ההפעלה החזירה (וככה תדע מה הסיבה המדוייקת לכשלון של הפונקציה).
פורסם 2012 ביוני 1813 שנים מחבר שתי הודעות לפני זה שמתי את הקוד...רק ששיניתי את ה stderr ל perror כמו שאמרת ולשם הקומפיילר מצביע עם כל הבעיות...
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.