Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2009, 19:54   #1
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
Стрелка Правильно ли я сделала программу со списком(С++)

Задача:Задача: Найти сумму значений тех ключевых полей, которые НЕ совпадают с заданным значением ключа. Проходить списком в направлении от хвоста к голове. Список двухсвязный.

Суть программы: Когда пользователь вводит ключи то программа проверяет есть ли эти числа в списке и если есть то присваивает их нулю.
Правильно ли я сделала?? Или может нужно удалять спомощью очистки памяти(delete) и каждый раз перерабатывать сам список??

Код:
#include <iostream>
using namespace std;

class Node
{
public:
	int number;
	Node* next;
	Node* last;
};

int main()
{
	Node* head = NULL;
	Node* tail = NULL;
	Node* ptrLast = NULL;
    int n;
    
    cout<<"Enter size of list:";
    cin>>n;

cout<<"Enter number: ";

for(int i=0;i<n;i++)
{
 int numb;
 cin>>numb;
 Node* ptr = new Node;
 ptr->number = numb;
 ptr->next = NULL;
 tail = ptr;
 if (head == NULL)
	{
 	  head = ptr;
	  ptrLast = ptr;
	  ptr->last = NULL;
	}
 ptr->last = ptrLast;
 ptrLast->next = ptr;
 ptrLast = ptr;
}

Node* ptr = NULL;
ptr = head;
//--------------------------

int a,nn,key;
cout<<"Enter number of keys: ";
cin>>nn;
Node* temp;
for(int i=0;i<nn;i++)
{
ptr=ptrLast;
cin>>key;
  for(int p=0;p<n;p++)
   {
    a=ptr->number; 
    if(key==a) ptr->number=0;   
    ptr=ptr->last;
   }
}

//--------------------------
ptr=head;
int l,result=0;
while(1)
{
l=ptr->number;
result=result+l;
if (ptr->next == 0) break;
ptr=ptr->next;
}
//--------------------------

cout<<endl;
cout<<"Result: "<<result<<endl;
system("PAUSE");
return 0;
}
Если помогла нажмите на весы

Последний раз редактировалось Olya90; 01.06.2009 в 20:07.
Olya90 вне форума Ответить с цитированием
Старый 01.06.2009, 20:51   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Особо не всматривался, но не очень понятна логика вот этого куска:
Код:
int a,nn,key;
cout<<"Enter number of keys: ";
cin>>nn;  // это, вроде, понятно - ввод заданного значения
Node* temp;
for(int i=0;i<nn;i++)
{
ptr=ptrLast;
cin>>key;  // а вот это что?
  for(int p=0;p<n;p++)
   {
    a=ptr->number; 
    if(key==a) ptr->number=0;   
    ptr=ptr->last;
   }
}
Вообще, вам ведь нужно найти сумму. То есть с самим списком ничего делать не надо (ни удалять, ни занулять...). Просто нужно пройти по списку и сравнивать поле number с заданным значением. Если не равно, то прибавляем его к сумме.

И что вот это за поле?
Код:
Node* last;
Советую вам сделать функции добавления и удаления элемента списка. Удобнее будет.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.06.2009, 21:54   #3
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

cout<<"Enter number of keys: ";
cin>>nn; //сколько мы будем вводить ключей(значений)

cin>>key;//ввод самого значения

Node* next - следующий ел-т списка
Node* last - предыдущий ел-нт списка
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Старый 01.06.2009, 22:00   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от Olya90
cin>>nn; //сколько мы будем вводить ключей(значений)

cin>>key;//ввод самого значения
А как это связано с заданием?
Цитата:
Найти сумму значений тех ключевых полей, которые НЕ совпадают с заданным значением ключа.
Ключ-то, по идее, один.

То есть вводите значение. Зануляете сумму. Потом идете от хвоста к голове и сравниваете значения элементов списка с этим заданным значением.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 01.06.2009, 22:07   #5
Olya90
Форумчанин
 
Аватар для Olya90
 
Регистрация: 16.03.2009
Сообщений: 125
По умолчанию

Ок спасибо!!
Если помогла нажмите на весы
Olya90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
програма со списком maner0k Помощь студентам 0 13.04.2009 20:10
Как правильно скомпилировать программу ГОСЕАН БД в Delphi 14 26.07.2007 13:18