PDA

View Full Version : سوال: برگرداندن اشاره گر



Dev.Look24
شنبه 27 دی 1393, 13:25 عصر
سلام
فرض کنیم 100 عنصر ارایه داریم که هر عنصر یک ساختار هست
و یک تایع نوشتیم به عنوان جستجو
تو تابع یک سری پارامتر میگیره و در ارایه جستجو میکنه اگر شرایط رو داشت اشاره گر رو برمیگردونه
حالا اگر مثلا 6 تا عنصر شرایط رو داشت و باید 6 عنصر رو اشاره گر رو برگردونیم باید چی کار کنیم؟> کسی میتونه یک مثال ساده بزنه و دعاش کنیم؟

rahnema1
شنبه 27 دی 1393, 15:59 عصر
سلام
اگه با زبان ++c می نویسید می تونید از iterator استفاده کنید
اینجا فرض کردیم وکتوری از int داریم و می خواهیم عناصری که بر 10 بخشپذیرند را پیدا کنیم

#include <vector>
#include <iostream>
using namespace std;
template <typename T>
vector<typename vector<T>::iterator> jostojoo(vector<T> arr)
{
vector<typename vector<T>::iterator> result;
for (auto it = arr.begin(); it != arr.end(); it++)
{
if (*it % 10 == 0)
{
result.push_back(it);
}
}
return result;
}
int main()
{
int arrsize = 100;
vector<int> arr;
arr.reserve(arrsize);
for (int i = 1; i <= arrsize; i++)
{
arr.push_back(i);
}

auto result = jostojoo(arr);
for (auto it = result.begin(); it != result.end(); it++)
{
cout<< **it <<endl;
}
}

Dev.Look24
شنبه 27 دی 1393, 17:10 عصر
ممنون، اگر بخواهیم با ابزار ساده و همین اشاره گر و ارایه کار کنیم باید چی کار کرد؟

rahnema1
شنبه 27 دی 1393, 20:47 عصر
ممنون، اگر بخواهیم با ابزار ساده و همین اشاره گر و ارایه کار کنیم باید چی کار کرد؟

نمیدونم تا کجا بهتون درس دادن
اما با اشاره تابع هم میشه نوشت که هر نوع تابعی به عنوان searchfunc بدیم بر اساس اون تابع جستجو می کنه
اه اشاره گر تابع هم نخوندین میتونید اون پارامتر را حذف کنید

#include <stdio.h>
typedef struct Sakhtar{
int x;
int y;
}Sakhtar;
int mazrabe_10(const Sakhtar * arr_elem)
{
return arr_elem->x % 10 == 0;
}
int jostojoo(Sakhtar * arr ,Sakhtar ** index, int nitems , int (*searchfunc)(const Sakhtar *))
{
int i;
int numindex = 0;
for (i = 0; i < nitems; i++)
{
if(searchfunc(arr + i))
{
index[numindex] = arr + i;
numindex++;
}
}
return numindex;
}
int main()
{
int i;
const int arrsize = 100;
Sakhtar myarr[arrsize];
Sakhtar* index[arrsize];
for (i = 0; i < arrsize; i++)
myarr[i].x = i * i;
int numindex = jostojoo(myarr, index, arrsize, mazrabe_10);
for (i = 0; i < numindex; i++)
printf("%d\n",index[i]->x);
return 0;
}

Dev.Look24
شنبه 27 دی 1393, 21:56 عصر
سلام
عزیز عکس رو دیدید؟ اصلا منظورش این بوده که من میگم؟ خروجی به مجموعه ای دانشجویان پیدا شده
شاید راه حل بهتری هم باشه!

rahnema1
شنبه 27 دی 1393, 22:08 عصر
سلام
عزیز عکس رو دیدید؟ اصلا منظورش این بوده که من میگم؟ خروجی به مجموعه ای دانشجویان پیدا شده
شاید راه حل بهتری هم باشه!

ببخشید عکس را الان دیدم
ولی مشخص نشده struct دانشجو شامل چیه

rahnema1
شنبه 27 دی 1393, 22:55 عصر
ببنید چون نمیدونم سوالهای قبلی چی بوده و student چی هست و این که چه چیزهایی برای شما درس دادن فقط میتونم حدس بزنم
شاید منظورش اینجور بوده:

#include <stdlib.h>
struct Daneshjoo* select_std_adv(struct Daneshjoo daneshjoo)
{
static struct Daneshjoo* listDaneshjoo = NULL;
static int sizeList = 0;
if ( daneshjoo.id > 20) //meyare jostejoo
{
if (sizeList == 0)
{
listDaneshjoo = (struct Daneshjoo *)malloc(listDaneshjoo, sizeof(struct Daneshjoo));
listDaneshjoo[sizeList] = daneshjoo;
sizeList++;
}
else
if (sizeList > 0)
{
listDaneshjoo = (struct Daneshjoo *)realloc(listDaneshjoo, (sizeList + 1) * sizeof(struct Daneshjoo));
listDaneshjoo[sizeList] = daneshjoo;
sizeList++;
}
}
return listDaneshjoo;
}