מערך דו ממדי - C - עמוד 3 - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

מערך דו ממדי - C


iem

Recommended Posts

כתבתי את הקוד הבא:


#include <stdio.h>
#include <stdlib.h>
#define N 4

int main()
{
int matrix[N][N];
static int i=0, j=0, counter=0;
int num;

while ( (scanf("%d",&num)) ==1 )
{

if (counter > N*N)
{
printf("Sliding Error !");
exit(0);
}

else if (i!=N)
{
matrix[i][j]=num;
i++;
counter++;
}
else if ( (i==N) && (j!=N) )
{
matrix[i][j]=num;
i=0;
j++;
counter++;
}

else if ( (i==N) && (j==N) )
{
matrix[i][j]=num;
counter++;
}
}

/*while may finished because one of the following: 1. EOF 2. a char */
if (isdigit(num)==0)
{
printf("Not a number !!");
exit(0);
}



/*Runs all over the matrix values and print them*/
/*==========================================================*/
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
printf("%d\t", matrix[i][j]);

printf("\n");
}


return 0;
}

עדיין לא עובד...

אשמח לקבל פידבק...

תודה.

קישור לתוכן
שתף באתרים אחרים

  • תגובות 35
  • נוצר
  • תגובה אחרונה

חביבי, הסתבכת. הנה הרעיון הכללי לאיך לעבור על מטריצה באמצעות לולאת while אחת:

while (/* some condition */) {
if (i >= N) {
/* i has reached the end - terminate loop */
break;
}

/* some code goes here */

j++;
if (j >= N) {
/* j has reached the end - go to next i, reset j */
i++;
j = 0;
}
}

יש מבין?

קישור לתוכן
שתף באתרים אחרים

מקווה שהבנתי...


#include <stdio.h>
#include <stdlib.h>
#define N 4

int main()
{

int matrix[N][N];
static int i=0, j=0;
int num;


while (scanf("%d",&num) ==1)
{

if (i >= N) /* i has reached the end - terminate loop*/
{
break;
}

matrix[i][j]=num;
j++;

if (j >= N)
{
/* j has reached the end - go to next i, reset j*/
i++;
j = 0;
}

} /*while*/

for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
printf("%d\t", matrix[i][j]);

printf("\n");
}
return 0;
} /*main*/

עבור מספרים מ-1 עד-16, קיבלתי פלט תקין.

עכשיו רק חסר לי משהו קטן לפני שאני מתחיל לעשות מניפולציות על המטריצה... אם קיבלתי משהו ששונה מ-int איפה אני ממקם את ה-

printf("NaN !!!");
exit(0);

??

תודה.

קישור לתוכן
שתף באתרים אחרים

למה אתה מתעקש לא להשתמש בfor פשוט? האם לממש for באמצעות while זה חלק מהתרגיל?

(רמז: הטיעון הקודם שלך ללמה זה לא יעבוד לא נכון)

לגבי מה לעשות אם קיבלת משהו שונה מ-int - במקרה כזה scanf תחזיר ערך שגיאה.

קישור לתוכן
שתף באתרים אחרים

למה אתה מתעקש לא להשתמש בfor פשוט?

אם אני מעוניין לממש ע"י for איך ייראה המבנה ? ומבחינת תנאי עצירה, אני מניח שאתה מתכוון ל-for מקונן, אז איך אני אקבע את תנאי העצירה שלי ?

יש לי בעיקרון 2 תנאים:

scanf("%d",&num) !=1 && (i==N)

ונניח בלולאה הפנימית:

j==N 

האם אני צודק ?

קישור לתוכן
שתף באתרים אחרים

אם אני מעוניין לממש ע"י for איך ייראה המבנה ? ומבחינת תנאי עצירה, אני מניח שאתה מתכוון ל-for מקונן, אז איך אני אקבע את תנאי העצירה שלי ?

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.


×
  • צור חדש...