הגעת למגבלת הצפייה למשתמשים שאינם רשומים באתר
  • נשמח אם תצטרפו לקהילה שלנו. הרשמה לאתר תקנה לכם את האפשרות לשאול שאלות ולהגיב לשרשורים באתר ללא כל עלות
  • טופס ההרשמה לאתר נמצא כאן למטה ולוקח פחות מ-30 שניות למלא אותו (כן, בדקנו עם סטופר 🤓)

עזרה בתיכנות בשפת C

  • פותח/ת השרשור talp
  • פורסם בתאריך

talp

משתמש משקיע
4,968
4,036
נק' מוניטין:
12,989
4,968
4,036
קאנטרי זכרון
אז ככה, יש לי תרגיל בית...
יש לי מערך דו מימדי מגודל 10X10
ואני צריך לבדוק בו משהו.
אני משתמש בפונקציות ובודק/משנה אותו.
עד כאן הכל טוב, עכשיו הבעיה היא שאני רוצה לשלוח את המערך הדו מימדי לתוך פונקצייה, ושהפונקצייה הזאתי תשלח את אותו המערך לתוך פונקצייה אחרת ותחזיר לי איזה שהוא ערך, ואז בערך הזה אני אשתמש בפונקצייה הראשונה.
הבעיה היא שהערך שאני מקבל תמיד נשאר 0 ולא משתנה.


אני אנסה לפשט את זה:

הפונקציה שלי מקבלת מערך של חיידקים, אני בודק את כולו 10X10 אם יש חיידקים או שיש שטח ריק. על כל נקודה במערך אני שולח את המערך לתוך פונקצייה (זה כבר פונקציה בתוך פונקציה) ושמה אני בודק את כל ה"שכנים" של החיידק (8 שכנים, כולל אלכסונים) ומחזיר את מספר השכנים, הבעיה היא שה"counter" שלי לא גדל משום מה.
מה הבעיה? האם זה אפשרי בכלל לשלוח מערך לתוך פונקציה בתוך פונקציה?
אני משנה את המערך רק בתוך הפונקציה הראשונה, השנייה נועדת להחזיר לי ערך INT בין 1 ל 8
 
מחא זמן לא ראיתי שפת c
תעתיק את הקוד לכאן אולי זה יזכיר לי ואוכל לעזור 😃

נשמע כמו בעיית פוינטרים קלאסית
 
כי אתה לא מעביר ברפרנס,העברה של מערך דו מימדי כדי לשנות אותו צריך לעבור ככה: ARR**
כנל קאונטר:COUNTER*
 
כי אתה לא מעביר ברפרנס,העברה של מערך דו מימדי כדי לשנות אותו צריך לעבור ככה: ARR***
כנל קאונטר:COUNTER*

לא נכון. כשאתה מעביר מערך, אתה מעביר מצביע למערך. אין שום בעיה לשנות את התוכן.
 
אנצל את זה שהפוסט יחסית חדש, התחלתי לאחרונה ללמוד קצת C בזמני הפנוי.
אני מנסה לבנות קוד שיקלוט סדרה של מספרים וידפיס את המספר השני בגודלו...
מה שכתבתי עובד בחלק מהמקרים ובחלק לא, אני לא מצליח להבין איפה הבעיה:
#include<stdio.h>

void main()
{
int a,b,second,max;
max = 0;
printf("Enter 5 numbers: ");
for (b = 0; b < 5; b++)
{
scanf_s("%d", &a);
if (a > max)
{
second = max;
max = a;
}

}

printf("The second bigger number is: %d", second);

system("pause");
}
 
אנצל את זה שהפוסט יחסית חדש, התחלתי לאחרונה ללמוד קצת C בזמני הפנוי.
אני מנסה לבנות קוד שיקלוט סדרה של מספרים וידפיס את המספר השני בגודלו...
מה שכתבתי עובד בחלק מהמקרים ובחלק לא, אני לא מצליח להבין איפה הבעיה:
קוד:
#include<stdio.h>

void main()
{
    int a,b,second,max;
    max = 0;
    printf("Enter 5 numbers: ");
    for (b = 0; b < 5; b++)
    {
        scanf_s("%d", &a);
        if (a > max)
        {
            second = max;
            max = a;
        }
        
    }

    printf("The second bigger number is: %d", second);

    system("pause");
}
להבא השתמש בתוויות קוד,זה לא קריא אחרת
 
והבעיה שלך היא שאחרי שאתה בודק אם A גדול ממקס אתה צריך גם לבדוק שA גדול מSECOND
שמח שהסתדרת
 
והבעיה שלך היא שאחרי שאתה בודק אם A גדול ממקס אתה צריך גם לבדוק שA גדול מSECOND
שמח שהסתדרת
זה לא תנאי מיותר? הרי בכל מקרה second לא יכול להיות גדול מ-max
בכל מקרה, ניסיתי את הקוד שחשבתי שעובד, עבד על כמה הזנות שונות אבל גם פה לא תמיד עובד...
זה הקוד החדש:

קוד:
#include<stdio.h>

void main()
{
    int a,b,second,max;
    printf("Enter 5 numbers: ");
    scanf_s("%d", &max);
    scanf_s("%d", &second);
    if (second > max)
        max = second;
        for (b = 0; b < 5; b++)
        {
            scanf_s("%d", &a);
            if (a > max)
            {
                second = max;
                max = a;
            }

        }
   
   
    printf("The second bigger number is: %d", second);

    system("pause");
}
 
מיותר,זה היה בסדר לפני זה,הבעיה שלך היא שאם אני מכניס למשל 3 ואז 5 (מקס הוא 5 וסקונד הוא 3) ואז אני מכניס 4,סקונד צריך להתעדכן אבל הוא לא מגיע לשם כי זה עובר את הIF
 
מיותר,זה היה בסדר לפני זה,הבעיה שלך היא שאם אני מכניס למשל 3 ואז 5 (מקס הוא 5 וסקונד הוא 3) ואז אני מכניס 4,סקונד צריך להתעדכן אבל הוא לא מגיע לשם כי זה עובר את הIF
נראה לי שהבנתי אותך, הכוונה אז למשהו כזה:
קוד:
#include<stdio.h>
void main()
{
    int a, b, second, max;
    max = 0;
    printf("Enter 5 numbers: ");
    for (b = 0; b < 5; b++)
    {
        scanf_s("%d", &a);
        if (a > max)
        {
            second = max;
            max = a;
        }
        else
        {
            if (a > second)
                second = a;
        }


    }

    printf("The second bigger number is: %d", second);

    system("pause");
}
 
חיובי, תודה!
הייתי ממליץ לך ללמוד עם הספר של יואב נתיב "ללמוד C" אם אתה רוצה ממש להתעמק בזה. לי, אישית, מאוד עזר בקורס C באוניברסיטה. יש לך שאלות טובות ופתרונות מלאים לאותן שאלות.
 
הייתי ממליץ לך ללמוד עם הספר של יואב נתיב "ללמוד C" אם אתה רוצה ממש להתעמק בזה. לי, אישית, מאוד עזר בקורס C באוניברסיטה. יש לך שאלות טובות ופתרונות מלאים לאותן שאלות.
זה הספר שאני משתמש בו..
הוא נותן פתרונות רק לחלק מהתרגילים
 
קוד:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <windows.h>
#include <time.h>
#define SCREEN_HEIGHT 25

void sleep_seconds(long seconds) {
    clock_t limit, now = clock();
    limit = now + seconds * CLOCKS_PER_SEC;
    while (limit > now)
        now = clock();
}

void sleep_ticks(long ticks) {
    clock_t limit, now = clock();
    limit = now + ticks;
    while (limit > now)
        now = clock();
}

void wait(long milliseconds)
{
    long timeout = clock() + milliseconds;
    while (clock() < timeout) continue;
}

void gotoxy(int x, int y)
{
    COORD coord;
    coord.X = x;
    coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
}

void main()
{
    int xpos, ypos,x,y;
    x = 0;
    y = 12;
    xpos = 1;
    ypos = 13;
    while (ypos >= 0 && xpos >= 0)
    {


            if ((xpos = x + 1) && (ypos = y + 1))         // כוכבית נעה ימינה ולמטה
                {
                    gotoxy(xpos, ypos);
                    putchar('*');
                    gotoxy(xpos - 1, ypos - 1);
                    putchar(' ');
                    x = xpos;
                    y = ypos;
                    ypos++;
                    xpos++;
                    Sleep(30);
                    if (xpos = 80)
                        xpos = xpos - 2;
                    if (xpos = 0)
                        xpos = xpos + 2;
                    if (ypos = 20)
                        ypos = ypos - 2;
                    if (ypos = 0)
                        ypos = ypos + 2;
                }


            if ((xpos = x - 1) && (ypos = y + 1))              // כוכבית נעה שמאלה ולמטה
                {
                    gotoxy(xpos, ypos);
                    putchar('*');
                    gotoxy(xpos + 1, ypos - 1);
                    putchar(' ');
                    x = xpos;
                    y = ypos;
                    ypos++;
                    xpos--;
                    Sleep(30);
                    if (xpos = 80)
                        xpos = xpos - 2;
                    if (xpos = 0)
                        xpos = xpos + 2;
                    if (ypos = 20)
                        ypos = ypos - 2;
                    if (ypos = 0)
                        ypos = ypos + 2;
                }



            if ((xpos = x - 1) && (ypos = y - 1))              // כוכבית נעה שמאלה ולמעלה
            {
                gotoxy(xpos, ypos);
                putchar('*');
                gotoxy(xpos + 1, ypos + 1);
                putchar(' ');
                x = xpos;
                y = ypos;
                ypos--;
                xpos--;
                Sleep(30);
                if (xpos = 80)
                    xpos = xpos - 2;
                if (xpos = 0)
                    xpos = xpos + 2;
                if (ypos = 20)
                    ypos = ypos - 2;
                if (ypos = 0)
                    ypos = ypos + 2;
            }


            if ((xpos = x + 1) && (ypos = y - 1))              // כוכבית נעה ימינה ולמעלה
            {
                gotoxy(xpos, ypos);
                putchar('*');
                gotoxy(xpos - 1, ypos + 1);
                putchar(' ');
                x = xpos;
                y = ypos;
                ypos--;
                xpos++;
                Sleep(30);
                if (xpos = 80)
                    xpos = xpos - 2;
                if (xpos = 0)
                    xpos = xpos + 2;
                if (ypos = 20)
                    ypos = ypos - 2;
                if (ypos = 0)
                    ypos = ypos + 2;
            }
   

       

           
       
    }

    system("pause");
}

אני יודע שיש דרכים אחרות לעשות את ה"כדור המקפץ", אבל מנסה להבין מה לא בסדר בקוד הזה... הקומפיילר מריץ את התוכנית אבל היא לא רצה כמו שצריך...
@vithano
@coldfire
 
שימו לב! השרשור ישן: לא היו תגובות בשרשור מעל 90 יום.

ייתכן שהתוכן בשרשור כבר אינו רלוונטי ולכן עדיף לפתוח שרשור חדש.
Back
למעלה תחתית