כותב |
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 19 January 2005 בשעה 04:57 | | IP רשוּם
|
|
|
|
השרשור יכלול שאלות בC ואת הפתרונות אליהן.
שאלה ראשונה:
כתוב תוכנית הקולטת טקסט ומדפיסה עבור כל תו שמופיע בטקסט את התו עצמו ומספר המופעים שלו בטקסט [מספר הפעמים שהוא מופיע]
פתרון:
קוד:
#define NUM_OF_CHARS 256
#include <stdio.h>
int main()
{
char number_appeared[NUM_OF_CHARS] = { 0 };
char input;
int iCounter;
while (scanf("%c", &input) == 1) number_appeared[input]++;
for (iCounter = 0; iCounter < NUM_OF_CHARS; ++iCounter)
if (number_appeared[iCounter] > 0)
printf("%c: %d\n", iCounter, number_appeared[iCounter]);
return 0;
} |
|
|
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 19 January 2005 בשעה 05:18 | | IP רשוּם
|
|
|
|
שאלה שניה:
נגדיר מערך בשם data, המכיל 20 מספרים מסוג int.
כתוב תוכנית הקולטת ערכים למערך DATA, סופרת את כמות המספרים שעכרם בין 20 ל-80, מחשבת את הממוצע החשבוני שלהם ומדפיסה אותו.
פתרון:
היינו יכולים לפתור את התרגיל על ידי קליטת ערכים גם ללא המערך, אבל השאלה דרשה מערך ולכן נשתמש באחד.
קוד:
#define ARRAY_SIZE (20)
#define LOW_RANGE (20)
#define HIGH_RANGE (80)
#include <stdio.h>
int main()
{
int data[ARRAY_SIZE];
int iCounter;
int sum_in_range = 0, counter_in_range = 0;
for (iCounter = 0; iCounter < ARRAY_SIZE; ++iCounter)
{
if (scanf("%d", &data[iCounter]) < 1)
{
printf("Input Error!\n");
return 1;
}
}
for (iCounter = 0; iCounter < ARRAY_SIZE; ++iCounter)
{
if (data[iCounter] >= LOW_RANGE && data[iCounter] <= HIGH_RANGE)
{
sum_in_range += data[iCounter];
counter_in_range++;
}
}
printf("Average: %lf\nNumbers in range: %d\n",
(double)sum_in_range / counter_in_range, counter_in_range);
return 0;
} |
|
|
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 19 January 2005 בשעה 08:24 | | IP רשוּם
|
|
|
|
שאלה:
כתוב תוכנית המטפלת במיון מערך מספרים.
הפונקציות הנדרשות:
- פונקצית SWAP המקבל כתובות של שני תאים במערך ומחליפה ביניהם.
- פונקציה למיון בועות של המערך. הפונקציה קוראת לפונקציה SWAP לפי הצורך.
- פונקציה להדפסת המערך.
פתרון:
הפתרון כולל את הפונקציות + תוכנית דוגמא.
קוד:
#include <stdio.h>
void swap(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void print_array(int arr[], int len)
{
int iCounter;
for (iCounter = 0; iCounter < len; ++iCounter) printf("%d\t", arr[iCounter]);
putchar('\n');
}
void bubble_sort(int arr[], int len)
{
int upper_limit, iCounter;
for (upper_limit = len -1; upper_limit > 0; upper_limit--)
{
for (iCounter = 1; iCounter <= upper_limit; ++iCounter)
{
if (arr[iCounter] < arr[iCounter-1])
swap(&arr[iCounter], &arr[iCounter-1]);
}
}
}
int main()
{
int arr[] = { 1, 5, 2, 7, 10, 3, 4, 6, 9, 8 };
bubble_sort(arr, 10);
print_array(arr, 10);
return 0;
} |
|
|
|
חזרה לתחילת העמוד |
|
|
ניר מנהל האתר
הצטרף / הצטרפה: 12 January 2005 מדינה: Israel
משתמש: מנותק/ת הודעות: 3296
|
נשלח בתאריך: 19 January 2005 בשעה 08:37 | | IP רשוּם
|
|
|
|
שאלה:
נתון מערך סימטרי בעל 9 איברים. מערך סימטרי זהו מערך בו המספר הראשון זהה למספר האחרון, השני זהה לאחד לפני האחרון וכו'.
כתוב תוכנית ההופכת כל מחצית מערך, דוגמא:
קוד:
Arr[9] = {1,2,3,4,5,4,3,2,1} |
|
|
אחרי ההיפוך נקבל:
קוד:
Arr[9] = {4,3,2,1,5,1,2,3,4} |
|
|
תשובה + דוגמא:
קוד:
#include <stdio.h>
void swap(int* x, int* y)
{
int temp = *x;
*x = *y;
*y = temp;
}
void print_array(int arr[], int len)
{
int iCounter;
for (iCounter = 0; iCounter < len; ++iCounter) printf("%d\t", arr[iCounter]);
putchar('\n');
}
void reverse_array(int arr[], int len)
{
int i;
if (len % 2 == 0) return;
for (i = 0; i < len / 4; i++)
{
swap(&arr, &arr[len/2-1-i]);
swap(&arr[i+len/2+1], &arr[len-1-i]);
}
}
int main()
{
int arr[] = { 1, 2, 3, 4, 5, 4, 3, 2, 1 };
reverse_array(arr, 9);
print_array(arr, 9);
return 0;
} |
|
|
|
חזרה לתחילת העמוד |
|
|
|
|