PDA

View Full Version : سوال: راهنمایی در مورد آرایه 2 بعدی پویا در C



hamide_kh
سه شنبه 27 بهمن 1388, 20:36 عصر
سلام خدمت دوستان
برنامه ای دارم که باید سطر و ستون را از کاربر بگیره و سپس یک آرایه 2 بعدی ایجاد کنه،سپس کوچکترین عنصر را پیدا کنه
البته من به روش زیر یک آرایه 2 بعدی ایجاد می کنم اما با این مشکل که سطر و ستون اون یک اندازه میشه روبرو هستم،برای اینکه تعداد سطر و ستون اون چیزی بشه که کاربر وارد می کنه چه باید کرد؟
2-در ضمن می خوام به جای اینکه آرایه int باشه char بشه(البته آرایه را char کردم اما جستجو میریزه بهم)
این هم از برنامه

#include<stdio.h>
#include<conio.h>
#include<alloc.h>
int main(){
clrscr();
int n,m,min=0,ii=0,jj=0;
printf("Enter a Number :");
scanf("%d",&n);

int **arr = (int **)malloc(n);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
printf("Enter %d%d:",i,j);
scanf("%d",&arr[i][j]);
printf("\n");
}
min=arr[0][0];
for(i=0;i<n;i++)
for(int j=0;j<n;j++)
{
if (arr[i][j]<min)
{
min=arr[i][j];
ii=i;
jj=j;
}
}
printf("Min is :%d",min);
printf("\nLocation is:%d%d",ii,jj);
getch();
}
اگه ممکنه راهنماییم کنید چون تا فردا بیشتر وقت ندارم
ممنون،منتظر هستم؟
در

amin1softco
سه شنبه 27 بهمن 1388, 23:48 عصر
فکر کنم با یک حلقه بشه این کار را انجام داد


int **a;
int size_x;
int size_y;
size_x = 5;
size_y = 3;
a = malloc(size_x * sizeof(int *));

for (i = 0; i < size_x; i++) {
a[i] = malloc(size_y * sizeof(int));
}

amin1softco
چهارشنبه 28 بهمن 1388, 00:20 صبح
اینم فکر کنم همون چیزیه که دنبالشی:


#include <stdio.h>
#include <stdlib.h> /* for malloc() prototype */

double **createArray(int nx, int ny)
{
int i, j;
double **retval;
retval = malloc(nx * sizeof(double *)); /* no cast */
printf("Inside createArray: retval = %p\n", (void *)retval);
for (i = 0; i < nx; i++) {
retval[i] = malloc(ny * sizeof(double)); /* no cast */
}
printf("inside the creating function:\n");
for (i = 0; i < nx; i++) {
for (j = 0; j < ny; j++) {
retval[i][j] = ny * i + j;
printf("retval[%d][%d] is %f\n", i, j, retval[i][j]); /* %f */
}
}
printf("\n");
return retval;
}

int main()
{
double **table;
int nx = 3, ny = 2; /* will actually be obtained at run time */

int i, j;
printf("In main(): before createArray, table = %p\n\n", (void *) table);
table = createArray(nx, ny);
printf("In main(): after createArray, table = %p\n\n", (void *) table);
for (i = 0; i < nx; i++) {
for (j = 0; j < ny; j++) {
printf("table[%d][%d] is %f\n", i, j, table[i][j]); /* %f */
}
}
return 0;
}

hamide_kh
چهارشنبه 28 بهمن 1388, 11:29 صبح
سلام خدمت شما دوست عزیز
ممنون از پاسختون
چک می کنم اگه مشکلی داشتم باز مزاحم میشم
:تشویق::تشویق::تشویق:

tdkhakpur
چهارشنبه 28 بهمن 1388, 21:10 عصر
و همیشه بعد از گرفتن حافظه از سیستم و استفاده از آن باید آنرا آزاد کرد.


int main()
{
double **table;
int nx = 3, ny = 2; /* will actually be obtained at run time */

int i, j;
printf("In main(): before createArray, table = %p\n\n", (void *) table);
table = createArray(nx, ny);
printf("In main(): after createArray, table = %p\n\n", (void *) table);
for (i = 0; i < nx; i++) {
for (j = 0; j < ny; j++) {
printf("table[%d][%d] is %f\n", i, j, table[i][j]); /* %f */
}
}
free(table); // اضافه شود
return 0;
}

در ضمن تابع دریافت حافظه از سیستم را بصورت زیر ساده تر کنید.


double **createArray(int nx, int ny)
{
int i, j;
double **retval;
retval = (double **)malloc(nx * ny * sizeof(double)); // تغییر
printf("Inside createArray: retval = %p\n", (void *)retval);
printf("inside the creating function:\n");
for (i = 0; i < nx; i++) {
for (j = 0; j < ny; j++) {
retval[i][j] = ny * i + j;
printf("retval[%d][%d] is %f\n", i, j, retval[i][j]); /* %f */
}
}
printf("\n");
return retval;
}