IOPanel

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

תיכנות פורום בנושאי תיכנות , פיתוח אתרים , שפות תיכנות , אפליקציות סלולר וטאבלטים.

תוכנה ומערכות הפעלה : תיכנות

שאלה בשפת C

שלום רב, נאמר וקיבלתי את הקלט הבא שאני צריך לטפל בו: המשתמש הכניס רצף ארוך של תווים הכוללים מספרים ואותיות ...
תגובה
 
קישור חוזר הגדרות אשכול אפשרויות הצגת נושא
ישן 02-12-12, 23:42   #1 (קישור ישיר)
IO Rookie
 
תאריך הצטרפות: Nov 2012
הודעות: 18
ברירת מחדל שאלה בשפת C

שלום רב,

נאמר וקיבלתי את הקלט הבא שאני צריך לטפל בו:

המשתמש הכניס רצף ארוך של תווים הכוללים מספרים ואותיות - איך אני יכול לגשת לקלט ספציפי בתוך השורה הארוכה של הקלט ולבדוק אותו?

נאמר הדבר הבא:
D100000F90d90000a1p50D100000D99999a100f0

איך אני יכול לבדוק את מה שכתוב למשל מ-D ועד ה-9 האחרון באמצע הקלט ("D99999") בלי מערכים ובשימוש של עד לולאות ומשפטי תנאי.

תודה מראש.
eliorws לא מחובר   הגב עם ציטוט
ישן 03-12-12, 0:00   #2 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

זה נכנס לc string .
יש לך פוינטר לchar -
קוד:
char * szBuffer
אתה רוצה לגשת לקלט במיקום מסויים עד מיקום מסויים אחר - נניח משתנים -
קוד:
char cnPositionStart = desiredStartPos; char cnPositionEnd = desiredEndPos;
אם אתה רוצה לעבור תו-תו -
איטרטור :
קוד:
char cI = 0;
באפר תו -
קוד:
char cBuff = 0;
גש בצורה הבאה -
קוד:
for (cI=cnPositionStart; ci<=cnPositionEnd; cI++) { cBuff = *(szBuffer+cI); //code }//for
אם אתה רוצה לגשת לזה כסטרינג נפרד - אתה יכול ליצור סטרינג זמני (+1 לnull terminator) -
קוד:
char cSizeOfTmpBuff = cnPositionEnd - cnPositionStart; char * szTempBuff = (char*)calloc(cSizeOfTmpBuff + 1, sizeof(char));
ואז אתה יכול להעתיק -
קוד:
strcpy_s(szTempBuff, cSizeOfTmpBuff , szBuffer);
בסוף גם שם אתה עובר תו-תו , אבל אם זה סטרינג שאתה צריך לאורך פונקצייה אז אולי יהיה יותר נוח .
אל תשכח לעשות free אם אתה הולך בשיטה הזאת ומאלקץ .
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 03-12-12, 0:26   #3 (קישור ישיר)
IO Rookie
 
תאריך הצטרפות: Nov 2012
הודעות: 18
ברירת מחדל

תודה לך אבל יש רק בעיה אחת - אסור להשתמש במערכים או מצביעים.
eliorws לא מחובר   הגב עם ציטוט
ישן 03-12-12, 0:56   #4 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

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

חשבתי על לעשות char cBuff שיקבל strcpy_s של כל תו .
אבל זה שאתה דוחף לפונצייה פוינטר לסטרינג גם נורא ?
__________________
dany_74q לא מחובר   הגב עם ציטוט
ישן 03-12-12, 1:53   #5 (קישור ישיר)
IO Rookie
 
תאריך הצטרפות: Nov 2012
הודעות: 18
ברירת מחדל

נצא מנקודת הנחה שאני לא אמור לדעת בכלל מה זה מערך,פונקציות שלא מ-stdio.h, פוינטרים וכו'. הרעיון הוא שהמשתמש מכניס שורה ארוכה של קודכאשר אות מסמל משהו מסויים והמספר מבטא אותו. עכשיו בהתאם לצירוף הלינארי של אות+מספר אני אמור להדפיס משפטים מסוימים.
eliorws לא מחובר   הגב עם ציטוט
ישן 03-12-12, 2:10   #6 (קישור ישיר)
IO Chats
 
סמל האישי של dany_74q
 
תאריך הצטרפות: Jun 2008
הודעות: 4,790
ברירת מחדל

נורא מגביל לדעתי .

הבנתי את הרעיון , סמלוץ מסויים , המשתמש מכניס 'op code' ואתה מדפיס לו משהו בהתאם .

אבל אם אתה מקבל את זה כc string - אתה חייב איכשהו לעבור על הזכרון ,
לקבל סטרינג זה אחלה , אבל אתה לא יודע מה יש בפנים אם אתה לא ניגש לזכרון .

גם הc string עצמו אגב הוא הרי מוגדר איכשהו , אתה לא מקבל אוויר ,
אם זה על הstack אז יש לך מערך char-ים , אבל אי אפשר להשתמש במערך ,
אם זה על הheap אז יש לך פוינטר לסטרינג , אבל אי אפשר להשתמש גם בפוינטר .

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

נניח שאפשר רק להגדיר , אז יש לנו char szInput[SIZE] שמקבל את הקלט .
קבלת קלט עם איזושהי פונקצייה לטעמך , עכשיו צריך לגשת אליו .
אתה לא יכול לגשת כמערך - אז szInput[Position] בלתי אפשרי ,
אתה לא יכול לגשת כפוינטר - אז *(szInput + Position) בלתי אפשרי ,

כיוון מסויים זה נניח לעשות switch case בלולאה , ואז אתה קובע דלימיטר ,
שזה נניח אות (לך לפי ערך ascii) , אבל גם אז אתה צריך לפרסר את זה ולגשת לזכרון עצמו ,

איך שאני קורא את זה כרגע (וכנראה זו אי הבנה שלי , אז תקן אותי) -
המשימה היא - קבלת קלט , תפרסר את הקלט בלי לגשת לזכרון .
קצת מוזר .
__________________
dany_74q לא מחובר   הגב עם ציטוט
קישור פירסומי
ישן 03-12-12, 18:10   #7 (קישור ישיר)
IO Rookie
 
תאריך הצטרפות: Nov 2012
הודעות: 18
ברירת מחדל

ואם מדובר בהדפסה תוך כדי תנועה ( נקרא לזה כך): מכניסים תו ורץ של מספרים ואם הוכנס התו הבא התוכנית תדפיס משהו שהיא אמורה להדפיס וככה הלאה...הדפסה תוך כדי קליטה. עכשיו זה יכול להסתדר?
eliorws לא מחובר   הגב עם ציטוט
ישן 03-12-12, 18:57   #8 (קישור ישיר)
IO Rookie
 
תאריך הצטרפות: Nov 2012
הודעות: 18
ברירת מחדל

הנה דוגמא למשל:
זה הקלט
D100000F90d90000a1p50D100000D99999a100f0

איך אני ניגש לקטע קוד הזה למשל: D100000? ואיך אני משווה אותו לקטע קוד בהמשך: D99999? מבלי להשתמש בכל מה שציינתי. רק עד לולאות.
eliorws לא מחובר   הגב עם ציטוט
ישן 03-12-12, 19:46   #9 (קישור ישיר)
IO Rookie
 
תאריך הצטרפות: Nov 2012
הודעות: 18
ברירת מחדל

וזו השאלה למקרה שאני לא מסביר את עצמי טוב:
1 - http://www.upf.co.il/file/55370389.html
2 - http://www.upf.co.il/file/954155392.html
קלט לדוגמא - http://www.upf.co.il/file/495689141.html
פלט לדוגמא - http://www.upf.co.il/file/506790622.html
eliorws לא מחובר   הגב עם ציטוט
ישן 03-12-12, 21:19   #10 (קישור ישיר)
IO Rookie
 
סמל האישי של David32
 
תאריך הצטרפות: May 2009
הודעות: 62
ברירת מחדל

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


קוד:
main()
{

char command = 'b';
int	val = 0;
int	fuel = 100 , dist = 0 , distChange = TRUE, trak = 0, trakCount = 0, press = 0;


printf(" Insert command then value \n");
while (TRUE)
{
// getting message
	scanf("%c" , command);
	scanf("%d" , val);
//parsing
	if (command == 'd' || command == 'D')
	{
		if (val - dist < 100)
			printf("Warning\n");

		if (val == 400000)
		{
			printf(" UHU! ..... \n");
			break;
		}

		if (dist > val)
			printf(" Technion... \n");

		dist = val;
		
	}
	if (command == 'a' || command == 'A')
	{
		if (val > trak)
			trakCount++;
		else
			trakCount--

		if (trackCount >= 4)
			printf(" Where are we going, sir?\n");

		trak = val;
	}
	if (command == 'f' || command == 'F')	
	{
		if (val == 0 && dist < 400000)
		{
			printf("Mission failed\n");
			break;
		}

		if (distChange == 0)
			printf(" Fuel is ..... \n");

		fuel = val;
		distChange = FALSE;

		if (fuel == 0)
			break;
	}
	if (command == 'p' || command == 'P')
	{
		if (val > 50 || val < 0)
			printf("High pressure \n");

		press = val;
	}
} // end of while
} // end of main
לא העברתי קימפול או משהו ככה שיש מצב לטעויות , אין לי באמת כוח לבדוק (פשוט כי אין לי קומפיילר על המחשב פה , ולא בא לי להדליק את הלינוקס / להתחבר לעבודה) נקווה שלא יצאתי חומוס.
__________________
Intel Q6700 @ 3.0 (333x9) - CoolerMaster Hyper212
Gigabyte GA-EP45-DS3
2x2GB G.SKILL 800Mhz DDR2 @ Stock
Palit HD4870 Dual Sonic Edition 1GB- Accelero S1 Rev.2
Western Digital WD5000AAKS 500GB
Coolermaster Real Power Pro 550W
Coolermaster HAF 932
David32 לא מחובר   הגב עם ציטוט
ישן 03-12-12, 22:35   #11 (קישור ישיר)
IO Rookie
 
תאריך הצטרפות: Nov 2012
הודעות: 18
ברירת מחדל

תודה רבה. אני אבדוק את זה במהרה ואני אחזיר תשובה.
eliorws לא מחובר   הגב עם ציטוט
ישן 20-02-13, 23:43   #12 (קישור ישיר)
IO Rookie
 
תאריך הצטרפות: Feb 2013
הודעות: 18
ברירת מחדל

ניסית להשתמש בפונקציות ספריה של STRING?
Rider לא מחובר   הגב עם ציטוט
תגובה


הגדרות אשכול
אפשרויות הצגת נושא

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

vB code הינו פועל
סמיילים הינו פועל
קוד [IMG] הינו פועל
קוד HTML הינו כבוי
Trackbacksהינו פועל
Pingbacks הינו פועל
Refbacks הינו פועל

נושאים דומים
אשכול מפרסם האשכול פורום תגובות הודעה אחרונה
עזרה במציאת הבעיה בקוד בשפת C eliorws תיכנות 6 08-11-12 21:39
בעיה בשפת ניווט של WAZE maxim880 אפליקציות ומשחקים לסלולאר 2 19-10-12 15:32
בשפת C, מה תדפיס למסך השורה הבאה: GOLAN-GB דיבורים על הא ודא 1 16-07-11 19:47
עזרה בתרגיל בשפת JAVA boxerown תיכנות 20 04-01-09 10:17
עזרה שניה בשפת C ExtaNd תוכנה ומערכות הפעלה 13 08-11-08 21:30


כל הזמנים הם GMT +3. השעה כרגע היא 14:28.





מופעל על ידי: vBulletin
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO
IOPanel.net © כל הזכויות שמורות