מטריצה C# - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

מטריצה C#


omfir

Recommended Posts

אני לא מצליח לפתור את השאלה הבאה: בנה מטריצה 5X5 והחלף את השורות בעמודות.

בניתי הדפסתי אבל אני לא מוצא דרך להחליף את השורות והעמודות חוץ מאולי להכניס את השורה ואת העמודה למערך.

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

מה הכוונה הבחלף שורות בעמודות? אני מנחש שאתה לא מתכוון פשוט ללהשתמש באינדקסים הפוך

אז אם הכוונה היא להחליף את הערכים בין התאים במטריצה סימטרית אז אתה יכול להתשמש כזה

for (i=0 , i<MAX-1 , i++)

for (j=i+1 , J<MAX , J++)

Temp=Arr[i,i+j]

Arr[i,i+j]=Arr[i,i+j]

Arr[i+j,i]=temp

וכן לא רשמתי "תחבירית" נכון.

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

לא הבנתי.יש לי בעיה עם המטריצה שאני לא מבין איך זה עובד ואיך הלסתכל על זה יש אפשרות שאולי אתה תעלה איור של מטריצה ותסביר לי על מה ואיך להסתכל.

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

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

בשביל להחליף בין השורות והעמודות של מטריצה (מה שנקרא שחלוף) צריך להעביר כל כל איבר במקום ה-[a[i,j למקום ה-[a[j,i.

לכן, הפתרון צריך להיות מבוסס על משהו כזה:

for (int i = 0 ; i < 5 ; ++i) {
for (int j = 0 ; j < 5 ; ++j) {
int temp = arr[i,j];
arr[i,j] = arr[j,i];
arr[j,i] = temp;
}
}

אבל מה? הפתרון הזה בעייתי - כי נעבור על כל זוג תאים (i,j ו-j,i) פעמיים, ככה שבסופו של דבר לא עושים כלום.

לכן צריך לדאוג לעבור רק על התאים שמעל (או מתחת) לאלכסון הראשי, כלומר:

for (int i = 0 ; i < 5 ; ++i) {
for (int j = i+1 ; j < 5 ; ++j) {
int temp = arr[i,j];
arr[i,j] = arr[j,i];
arr[j,i] = temp;
}
}

ככה דואגים שכל זוג תאים יוחלף בדיוק פעם אחת.

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

חחח אחרי כל השנים הללו אני שמח שאני עדין בכיוון ;D

אבל נראה לי שמה שרשמתי היה יותר מדויק, מיכוון שאין לך מה לרוץ על האיבר האחרון באלכסון לכן I קטן מ4 (למרות שזה יפול בשורה הבאה)

כמו כן או שאתה עושה J++ או שאתה עושה מוסיף ל J אחד בהתחלה אבל לא ביחד ...

לא הבנתי.יש לי בעיה עם המטריצה שאני לא מבין איך זה עובד ואיך הלסתכל על זה יש אפשרות שאולי אתה תעלה איור של מטריצה ותסביר לי על מה ואיך להסתכל.

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

לגבי הסבר, בעצם אתה הולך על האלכסון של המטרציה משחלף שורה בעמודה ומסתכל על המינור הבא

או במילים אחרות אתה לוקח את השורה הראשונה ומחליף ערכים עם העמודה הראשונה

עכשיו מסתכל על המטריצה בלי השורה והעמודה הראשונה ועושה אותו דבר.

זה יכול להשמע מסובך אם אתה לא לוקח דף ומקשקש את הבעיה על הדף ( כך אני הייתי עושה )

אחרי כמה דוגמאות ופתרונות אתה כבר תחשוב על דרך להפוך מטריצה הזאת למטריצה שניה.

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

אבל נראה לי שמה שרשמתי היה יותר מדויק, מיכוון שאין לך מה לרוץ על האיבר האחרון באלכסון לכן I קטן מ4 (למרות שזה יפול בשורה הבאה)

הבדל זניח.

כמו כן או שאתה עושה J++ או שאתה עושה מוסיף ל J אחד בהתחלה אבל לא ביחד ...

מה?

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

שניצל יש לי בעיה קטנה ואולי מישהו יוכל לעזור לי.

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


for (int i = 0; i < cols; i++)
{
for (int j = 0; j <rows ; j++)
Console.Write(Mat[j,i] + " ");
Console.WriteLine();
}

מה אתה אומר על פתרון כזה?

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

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

יכול להיות שאני מסתכל על זה לא נכון.

יש אפשרות שתעשה טבלת מעקב או איור שמסביר את זה.

אני פשוט לא מבין אני מיואש[br]פורסם בתאריך: 2.05.2009 בשעה 15:36:30


אני חושב חושב מנסה ולא מבין איך זה הופך את זה זה מבלבל אותי
קישור לתוכן
שתף באתרים אחרים

תחשוב על זה כך:

for (int i = 0; i < cols; i++)

for (int j = 0; j <rows ; j++)

פעולה

זה הבסיס, כך אתה עובר על כל האיבר המתריצה.

*במקרה שלנו מספר השורות שווה למספר העמודות

עכשיו מה שאתה צריך לעשות זה להחליף מקום, בין שורות לעמודות, כלומר להפוך

A[i,J] -> A[J,I] x

יש כמה דרכים לעשות את זה, (אני אתן לך אחת יותר פשוטה להבנה)

מה שהכי חשוב זה להבין שאתה לא באמת צריך לרוץ על כל המטריצה כי אם החלפת את איבר 1,2

אתה לא צריך להחליף את איבר 2,1 (כי 1,2 הוחלף כבר עם 2,1)...

לכן אתה מסתכל על איזה איברים אתה כן צריך לעשות את החלפה ותראה שאלו רק האיברים שמתחת לאלכסון.

כלומר איבר 1,1 ואיבר 2,2 וכו... זה לא משנה אם אתה מחליף עמודה בשורה הם נשארים במקום והאחרים

כל אלו שמתחת מתחלפים אם אלו שמעל (כמו שאמרנו 1,2 -> 2,1 ) כלומר נתחיל לרוץ משורה שניה (I=1

for (int i = 1; i < MAX; i++)

for (int j = 0; j <MAX ; j++)

פעולה

ונחליף את כל התאים שמתחת לאלכסון, זה אומר שבשורה השניה (I=1) יש רק תא אחד מתחת לאלכסון (תספור)

בשלישית(I=2) יש 2 תאים, כלומר J=0,1 או במילים אחרות J>I

for (int i = 1; i < MAX; i++)

for (int j = 0; j < i ; j++)

פעולה

עכשיו רק נשאר לך לכתוב את הפעולה שתיהיה, להלחליף את האיבר שמעל האלכסון אם זה מתחת

TEMP=Arr[i,j]

Arr[i,j]=Arr[j,i]

Arr[j,i]=temp

אין יותר מובן מזה.

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

או קי סבבה אתה בכיתה י"א לחוץ טילים מהבגרות ואתה נתקע בדבר הכי פשוט שיש:

פשוט תבנה שני מערכים דו מימדיים (מטריצות) אחת היא המקורית. בשניה אתה פשוט

מבצע עליה לולאה כפולה של 5 (יענו שתי לולאות FOR על שני משתנים שונים) ואז אתה כותב: [b[i,j]=a[j,i .

פשוט מאוד לא?

נ.ב

I וJ הם המשתנים של הלולאות פור.

A מצערך מקורי.

B מערך משני אליו אתה מכניס בסדר הפוך את טורים והשורות.

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


using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication14
{
class Program
{
static void Main(string[] args)
{
int[,] Mat = new int[5, 5];
int rows = Mat.GetLength(0);
int cols = Mat.GetLength(1);
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
Mat[i, j] = int.Parse(Console.ReadLine());

for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
Console.Write(Mat[i, j] + " ");
Console.WriteLine();



}
for (int i = 0; i < cols; i++)
{
for (int j = 0; j < rows; j++)
Console.Write(Mat[j, i] + " ");
Console.WriteLine();
}
}
}
}

אני לא מבין איך זה עובד.

אני מצייר על מחברת מטריצה 5X5 מכניס ערכים לכל אינדקס ואז עובר על הקוד.

הקטע הוא שאני לא מבין איך זה הופך את זה,אני מנסה להסתכל בקוד לראות איך זה הופך אבל לא מבין.

[br]פורסם בתאריך: 2.05.2009 בשעה 16:09:36


אני בכיתה י' יום שני יש לי מתכונת וזה הורס לי הכול עם אני לא מבין את המטריצה.

אני מתוסכל ברמות אטומיות.

אני מנסה להסביר לשניצל מה אני לא מבין אבל פשוט קשה להסביר.

אני חוזר על קוד שוב ושוב מצייר את המטריצה מנסה לראות איך זה הופך אבל לא מבין למען השם[br]פורסם בתאריך: 2.05.2009 בשעה 16:11:57


הבנתי את זה סוף סוף.

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

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

amir85, תשתמש בטג קוד (כפתור # למעלה) במקום להצמיד לשמאל, כדי שהקוד שלך ייראה נורמלי.

omfir, תסתכל על הקוד הזה:

      for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
Console.Write(Mat[i, j] + " ");
Console.WriteLine();



}
for (int j = 0; j < cols; j++)
{
for (int i = 0; i < rows; i++)
Console.Write(Mat[i,j] + " ");
Console.WriteLine();
}

(זה אותו קוד כמו שלך, רק החלפתי בין השמות של i ו-j בחלק השני)

החלק הראשון מדפיס את המטריצה כמו שהיא.

החלק השני מדפיס את המטריצה המשוחלפת.

שים לב שכל ההבדל בין החלקים הוא הסדר של הלולאות - בחלק הראשון עוברים קודם כל על השורות (i), ובכל שורה עוברים על כל העמודות. בחלק השני עוברים קודם כל על העמודות (j), ובכל עמודה עוברים על כל השורות.

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

הבנתי. אבל הנה שאלה קשה שלא הצלחתי לפתור

12. כתוב תוכנית, אשר א. קולטת ציוני 5 בחינות ל40 תלמידים.

ב. חשב והדפס ממוצע כתתי לכל מקצוע ומקצוע.

ג. חשב והדפס את הציון הממוצע שקבל כל תלמיד.

ד. מצא את הממוצע המקסימאלי של כל מקצוע וכל תלמיד, וציין באלו מספרי מקצועות הגענו לממוצע מכסימאלי, עשה זאת גם לגבי הממוצע המכסימאלי לתלמיד, ורשום את מספרי התלמידים שקבלו ממוצע זה.

איפה אני שם את המקצועות ואיפה את התלמידים זה מבלבל.

שניל אני מאוד מעריך את יוזמתך לעזור לי! וגם לאמיר ולכל החברה שעוזרים.

תודה רבה מקרב לב

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

ארכיון

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

×
  • צור חדש...