Нужно, чтобы вычисленные в функции Min_Max значения адресов min и max сохранялись и передавались в функцию Count. А функция Count должна считать элементы между адресами min и max, но я понял, что адреса элементов стека не идут по порядку.
struct Stack { // Декларация структурного типа
int info;
Stack *next;
} *beg;
void Min_Max(Stack*, Stack*, Stack*);
Stack* Instack(Stack *p, int in) {
Stack *t = new Stack;
t->info = in;
t->next = p;
return t;
}
void View(Stack *p) {
Stack *t = p;
while (t != NULL) {
cout << t->info << endl;
t = t->next;
}
}
void Del_All(Stack **p) {
Stack *t;
while (*p != NULL) {
t = *p;
*p = (*p)->next;
delete t;
}
}
void Min_Max(Stack *p, Stack *min, Stack *max) {
Stack *t = p, *m;
int min_value = t->info, max_value = 0;
//t = p;
for (t = t->next; t != NULL; t = t->next)
{
if (min_value > t->info)
{
min = t->next; min_value = t->info;
}
if (max_value < t->info)
{
max = t->next; max_value = t->info;
}
}
cout << "min_value: " << min_value << ends << min << endl << "max_value: " << max_value << ends << max;
m = min > max ? min : max; cout << endl << m;
}
void Count(Stack *p, Stack *min, Stack *max) {
int c = 0; Stack *t = p;
for (t = t->next; t != NULL; t = t->next)
{
if ((t->next < max) && (t->next > min))
c++;
}
cout << c << ends << min << ends << max;
}
void Sort_info(Stack *p) {
Stack *t = NULL, *t1;
int r;
do {
for (t1 = p; t1->next != t; t1 = t1->next)
if (t1->info > t1->next->info) {
r = t1->info;
t1->info = t1->next->info;
t1->next->info = r;
}
t = t1;
} while (p->next != t);
}
int main()
{
int i, in, n, kod, kol = 0;
Stack *min=NULL, *max=NULL;
srand(time(0));
while (true) {
cout << "\n\tCreate - 1.\n\tAdd - 2.\n\tView - 3.\n\tDelete - 4.\n\tSort - 5.\n\tMinMax - 6.\n\t\Count - 7\n\tEXIT - 0. : ";
cin >> kod;
switch (kod) {
case 1: case 2:
if (kod == 1 && beg != NULL) {
// Если создаем новый стек, должны освободить память, занятую предыдущим
cout << "Clear memory!" << endl;
break;
}
cout << "Input kol = ";
cin >> n;
for (i = 1; i <= n; i++) {
in = rand();
beg = Instack(beg, in);
}
if (kod == 1) cout << "Create " << n << endl;
else cout << "Add " << n << endl;
break;
case 3: if (!beg) {
cout << "Stack is empty!" << endl;
break;
}
cout << "--- Stack ---" << endl;
View(beg);
break;
case 4:
Del_All(&beg);
cout << "Memory is free!" << endl;
break;
case 5:
Sort_info(beg);
break;
case 6:
Min_Max(beg, min, max);
break;
case 7:
Count(beg, min, max);
break;
case 0:
if (beg != NULL)
Del_All(&beg);
return 1; // Выход – EXIT
}
}
return 0;
}
Как я понял из комментов, вам нужно передать указатели в ф-цию, в ней вычислить нужные значения, сохранить их в переменные, доступные в main, а потом использовать их для вызова другой ф-ции. Если я прав, то вам нужно изменить ф-цию MinMax так, чтобы она не просто вычисляла адреса, но и сохраняла их. Для этого можно добавить возвращаемое значение в виде пары адресов и присваивать его в main переменным, но это морока, проще будет передовать в ф-цию адреса указателей, тобишь:
void Min_Max(Stack*, Stack**, Stack**);
Тогда при вызове ф-ции нужно будет:
Min_Max(beg, &min, &max);
Тогда значения адресов в указателях min и max будут соответствовать вычесленным в ф-ции MinMax. Ну и соответственно нужно отредоктировать код самой ф-ции.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей