שפת 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");
}


ארגון הדוגמה עריכה

פרק זה לוקה בחסר. אתם מוזמנים לתרום לוויקיספר ולהשלים אותו. ראו פירוט בדף השיחה.




הפתרון