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

C|העברת מטריצה לפונקציה


Omer Michleviz

Recommended Posts

היי,

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

אשמח לקבל הכוונה.

#include <stdio.h>
#include <stdlib.h>
#include "src2.h"
#include <time.h>

//--------------------//
void main()
{
	int base=5;
	int arr []  = { 1, 2, 3, 4, 5, 6 };
	char mat[][3] = { { 'A', 'a', 'a' }, { 'a', 'A', 'A' } };
	int size,result;
	size= sizeof(arr) / sizeof(arr[0]);
	srand(time(NULL));
	base = rand() % 10 + 1;
	printTriangle(base);
	result = matrix((char *)mat, 2, 3, 'A');
	printf("Thae array is: %d\n", result);
	result=naturalOrder(arr, size);
	printf("Thae array is: %d\n", result);
	system("pause");
}
#include "src2.h"

void printTriangle(int base)
{
	int  i, j;
	for (i = 1; i <= base - 1; i++)
	{
		printf("%*c", base - i, ' ');
		for (j = 0; j < i; j++)
		{
			printf("%c", '*');
		}
		printf("\n");

	}
}
int naturalOrder(int  arr[] ,int length)
{
	int i;
	for (i = 0; i < length-1;i++)
	{
	
		if (arr[i] > arr[i + 1])
			return 1;

	}
	return 0;
}
int matrix(char *arr, int rows, int cols, char cr)
{
	int i, j, sum = 0;
	for ( i = 0; i < rows; i++)
	{
		for (j= 0; j < cols; j++)
		{
			if (*((arr + i*cols) + j) == cr)
				sum += 1;
		}
	}
	return 0;
}
//prototypes
void printTriangle(int base);
int naturalOrder(int arr[],int length);
int matrix(char *arr, int rows, int cols, char cr);

 

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

  • 3 שבועות מאוחר יותר...

יש לך כמה באגים בתוכנית

1. לגבי העברה של פוינטר היות והגדרת את המערך שלך להיות בעורך קבוע הוא כבר לא pointer to pinter אלא מערך ולכן אתה  צריך להגדיר אותו בפונקציה ככזה

יותר חומר אפשר לקרוא פה

http://c-faq.com/aryptr/pass2dary.html

(int matrix(char arr[][3], int rows, int cols, char cr
2. ממליץ במקום זה להגדיר char**  ולהגדיר אותו בהתם לגודל שאתה רוצה לדוגמה

 

   char** mat2 =NULL;
mat2 = (char**)malloc(sizeof(char*)*2);
    mat2[0] = (char*)malloc(sizeof(char)*3);
    mat2[0][0] = 'A';
    mat2[0][1] = 'a';
    mat2[0][2] = 'a';
    mat2[1] = (char*)malloc(sizeof(char)*3);
    mat2[1][0] = 'a';
    mat2[1][1] = 'A';
    mat2[1][2] = 'A';
    ואז אין בעיה לקרוא לפונקציה
int matrix(char** arr, int rows, int cols, char cr)
 
עוד כמה דברים
1. אתה לא מחזיר את sum
2.לא יותר פשוט לקרוא [arr[j ?
3. עדיף לעולם לעשות i++  ולא ++i    במקרה השני נוצר משתנה זמני שמוסב לתוך המשתנה הראשון

 

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

ארכיון

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

×
  • צור חדש...