נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
תיכנות
RSS UnderWarrior Forums : RSS תיכנות
נושא

נושא: שאלות ופתרונות ב-C

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
ניר
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 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;
}
חזרה לתחילת העמוד הצג את כרטיס החבר של ניר חפש הודעות אחרות של ניר בקר בדף הבית של ניר
 

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

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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