עבור לתוכן

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

Featured Replies

פורסם

היי,

יש לי בעיה עם העברת מטריצה לפונקציה ב 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    במקרה השני נוצר משתנה זמני שמוסב לתוך המשתנה הראשון

 

ארכיון

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

דיונים חדשים