13-07-2012, 15:03
|
|
|
חבר מתאריך: 13.07.12
הודעות: 34
|
|
שפת C מצביעים+מערכים חד מימדיים בקשה להכוונה
זהו תרגיל מהספר "ללמוד C " , ע"מ 188 תרגיל מס 4 .
הנחיות לתרגיל:
בכל התרגילים יש להשתמש במצביעים ובאריתמטיקה של מצביעים בלבד.
נשתמש בסוגריים מרובעים רק כאשר נגדיר מערך.
תרגיל:
כתוב פונקציה המקבלת מחרוזת מקור ומחרוזת יעד. הפונקציה "תדחוס" את מחרוזת המקור למחרוזת היעד בשיטת RLE . כלומר , אם מחרוזת המקור היא המחרוזת "aaaaddrrqqqqqsss "
אזי מחרוזת היעד תהיה "4a2d2r5q3s " .
בעיות הדורשות עזרה:
1.בגלל שהמחרוזות הן מסוג char וכך גם המצביעים... המונה שלי למספר ההופעות של אות מסוימת(כפי שתראו בתוכנית) הוא גם מסוג char , אם המונה מסוג int אז הפלט הוא סדרה של צורות בסמוך לאות ומובן למה...בכל אופן אני צריך מונה שיוכל לספור מעבר ל-9 .
2.חשבתי על זה כרגע....בעצם לא צריך שני מערכים אלא רק אחד המקור , לאחר מכן פשוט נאחסן את התוכן במצביע חדש לא מאותחל לכתובת הראשונה של המקור ונבצע סדרה של פעולות(מה שנדרש) ובסוף נשים בתא אחרון+1 '\0' , מה דעתכם?
***לא תשכחו מ-2 הרי יהיה במצביע זבל....אם הוא לא מאותחל.....
בבקשה אל תרשמו פתרונות או קוד (שקשור ישירות לתרגיל) , אני מבקש הנחייה,הערות,ביקורת בונה,רעיונות , הפנייה לנושאים שצריכים חידוד/חזרה לפי דעתכם.....אני מעוניין להבין לבד!
חפרתי המון, תודה רבה רבה לכל העוזרים! .
קוד:
#include <stdio.h>
#include <string.h>
#include <windows.h>
//-------------------------
void frle(char *ps , char *pd){
char *temp=ps , *start=pd , counter='0' ;
int i ;
while(*ps != 0) {//1 while open
while(*ps==*temp){
ps++;
counter++;
}
*pd=counter;
pd++;
*pd=*temp;
pd++;
temp=ps;
counter='0';
}//1 while close
*pd='\0' ;
puts(start);
}
//-------------------------
void main() {
char source[100] , destination[100];
printf("**This is RLE method for text compression**\nPlease enter a string of letters:\n");
gets(source);
system("cls");
frle(source,destination);
printf("\n\n");
system("pause");
}
//-------------------------
נערך לאחרונה ע"י Yigalo בתאריך 13-07-2012 בשעה 15:21.
סיבה: אני מטומטם
|