Форум программистов, компьютерный форум CyberForum.ru

Реализовать очередь на одномерном массиве - C++

Восстановить пароль Регистрация
 
Mursilaga
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 2
17.02.2013, 13:47     Реализовать очередь на одномерном массиве #1
Программа должна позволять многократно выполнять операции над очередью.
При выполнении функции input переменная last увеличивается на единицу, но после завершения функции и продолжении цикла снова становится исходным значением, то есть единицей. Почему так?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <stdio.h>
int input(int last, float queue[]); //функция которая будет добавлять в очередь элемент
int insert(int first,float queue[]); // функция, которая будет извлекать элемент из очереди
int check(int first,int last); // функция, которая будет проверять пуста ли очередь
 
int main() 
{  float queue [10];
  int first=1,last=1,key;
  while(1)
  {  printf("Выберете операцию\n 1 - проверить пуста ли очередь \n 2 - добавить элемент в очередь \n 3 - извлечь элемент \n 4 -выход\n");
  scanf("%d",&key);
  switch(key)
    { case 1: check(first,last);
    break;
    case 2: input(last, queue);
    break;
    case 3: insert(first,queue);
    break;
    }
    if (key==4) 
      break;
  }
    return 0;
}
 
int check(int first,int last)
{ if (first==last)
printf("Очередь пуста\n");
 else printf("Очередь не пуста\n");
 return 0;
};
 
int input(int last,float queue[])
{ float element;
  printf("Введите элемент, который нужно добавить в очередь\n");
  scanf("%f",&element);
  last++;
queue[last]=element;
  return last;
};
 
int insert(int first,float queue[])
{ float element;
  first++;
 queue[first]=element;
 printf("извлеченный элемент %f",element);
 return 0;
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
17.02.2013, 16:47     Реализовать очередь на одномерном массиве #2
Потому что передаешь переменную по значению в функцию и та, по сути работает с копией значения last)))))))))
Если хочешь функцию, которая модифицирует внутри себя аргумент из списка параметров, передавай его по ссылке. Т.е., все, что тебе нужно поменять в коде - одна строка:
int input(int& last,float queue[])

А, она у тебя еще в самом верху объявляется - там тоже надо так:
int input(int &last, float queue[]); //функция которая будет добавлять в очередь элемент
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
17.02.2013, 16:51     Реализовать очередь на одномерном массиве #3
Цитата Сообщение от ITcrusader Посмотреть сообщение
Потому что передаешь переменную по значению в функцию и та, по сути работает с копией значения last)))))))))
Если хочешь функцию, которая модифицирует внутри себя аргумент из списка параметров, передавай его по ссылке. Т.е., все, что тебе нужно поменять в коде - одна строка:
int input(int& last,float queue[])
Не, ну зачем? У него же модифицированный last уже возвращается из функции. просто надо это использовать должным образом при вызове функции.
Т.е. строка 16 не
C++
1
input(last, queue);
а
C++
1
last=input(last, queue);
ITcrusader
Эксперт C++
 Аватар для ITcrusader
176 / 162 / 8
Регистрация: 12.02.2013
Сообщений: 410
17.02.2013, 17:16     Реализовать очередь на одномерном массиве #4
как вариант)
Mursilaga
0 / 0 / 0
Регистрация: 03.02.2013
Сообщений: 2
17.02.2013, 21:19  [ТС]     Реализовать очередь на одномерном массиве #5
Точно. Спасибо, теперь понятно
Yandex
Объявления
17.02.2013, 21:19     Реализовать очередь на одномерном массиве
Ответ Создать тему
Опции темы

Текущее время: 03:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru