שפת C/מבנים/תרגילים
מראה
חבורה היא מבנה אלגברי המורכב מקבוצה (המסומנת G) ופעולה (המסומנת *) שפועלת בין 2 איברים בקבוצה.
א. צור מבנה בשם group, המורכב ממערך של מספרי נקודה צפה בגודל של לכל היותר 10 (שישמש כקבוצה) ופונקציה שפועלת על 2 מספרי נקודה צפה (שתשמש כפעולה).
הפתרון
typedef struct
{
float G[10];
float(*f)(float, float);
}group;
ב. התנאים כדי שמבנה אלגברי כנ"ל יקרא חבורה הן:
- סגירות: לכל ב, גם ב.
- אסוציאטיביות: לכל ב, מתקיים .
- קיום איבר נייטרלי: קיים ב איבר , כך שלכל ב, מתקיים .
- קיום איבר הפכי: לכל ב קיים איבר ב כך שמתקיים .
כתוב פונקציה שתקבל משתנה מסוג group ותבדוק אם הוא מקיים את התנאים כדי להיקרא חבורה.
הפתרון
#include <stdio.h>
typedef struct
{
float G[10];
float(*f)(float, float);
}group;
void examination(group g)
{
int i, j, k, I = 0, E = 0;
float e;
int inverse[10];
for (i = 0; i < 10; i++)
inverse[i] = 1;
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
for (k = 0; k < 10; k++)
{
if (g.f(g.G[i], g.G[j]) == g.G[k])
{
I = 1;
}
}
if (I == 0)
{
E = 1;
}
}
I = 0;
for (j = 0; j < 10; j++)
{
for (k = 0; k < 10; k++)
{
if (g.f(g.G[i], g.f(g.G[j], g.G[k])) != g.f(g.f(g.G[i], g.G[j]), g.G[k]))
{
E = 1;
}
if (g.f(g.G[j], g.G[k]) != g.G[k]||g.f(g.G[k], g.G[j])!=g.G[k])
I = 1;
}
if (I == 0)
{
e = g.G[j];
}
I = 0;
}
if (!e)
{
E = 1;
}
for (j = 0; j < 10; j++)
{
if (g.f(g.G[i], g.G[j]) == g.f(g.G[i], g.G[j]) == e)
inverse[i] = 0;
}
if (inverse[i] == 1)
{
E = 1;
}
}
if (E == 0)
printf("your group meets the conditions to be a group\n");
else
printf("your group does not meet the conditions to be a group\n");
}
ארגון הדוגמה
[עריכה]פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.
הפתרון