Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нужно в программе ввести функцию Input 
:(
    Опции темы
RobertEn
Дата 29.3.2015, 19:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.3.2015

Репутация: нет
Всего: нет



...благодаря которой мы вводим количество элементов
Как это правильно сделать?
Вообще у нас есть список, в котором мы делаем перезагрузку операций:
+ – объединить списки (list+list);
-- – удалить элемент из начала (--list);
= = – проверка на равенство.
SPISOK.CPP
------------------------------------------------------------------------
#include <conio.h>
#include <iostream.h>
#include "SPISOK1.H"


List::~List()//деструктор
{
while (Head!=0)//пока по адресу не пусто
{
element *temp=Head->Next;//временная переменная для хранения адреса следующего элемента
delete Head;//освобождаем адрес, обозначающий начало
Head=temp;//меняем адрес на следующий
}
}

void List::Input(int N)//здесь должна быть функция добавления количества элементов, что тут написать?
{

};

void List::Input(int x)//функция добавления элементов в список
{
element *temp=new element;//при каждом вызове выделяется память
temp->x=x;//записываем x в элемент структуры element
temp->Next=Head;
Head=temp;
}



void List::Print()//функция отображения списка на экране
{
element *temp=Head;

while (temp!=0)
{
cout<<temp->x<<" ";
temp=temp->Next;
}
}
int List::operator == (const List &list2)//перегрузка операции присваивания
{
if (N!=list2.N)//сравниваем размеры списков объектов
{
cout<<endl<<"spisok 1 "<<N;
cout<<endl<<"spisok 2 "<<list2.N;
cout<<endl<<"V spiskah raznoe kolichestvo elementov";
return 0;
}
else
{
for (int i=0;i<N;i++)
{
if (x[i]!=list2.x[i])
{
cout<<"Znacheniya spiskov ne ravni";
return 0;
}
}
}
return 1;
}
const List& List::operator=(const List &list2)//перегрузка оператора присваивания
{
delete [] x;
N=list2.N;
x=new int [N];
for (int i=0;i<N;i++)
{
x[i]=list2.x[i];
}
return *this;
}




List& List::operator +(List &list2)//перегрузка оператора сложения списков
{
for (int i=0;i<N;i++)
{x[i]=list2.x[i]+x[i];}
return *this;
}

void List::operator--()//перегрузка оператора удаления элемента из списка
{
element *temp=Head,*r;
int i=0;
if (N==0)
{
Head=temp->Next;
delete [] temp;
/* return Head;*/
}
while(temp)
{
if (i==N-1)
{
r=temp->Next;
if®
{
temp->Next=r->Next;
delete [] r;
}
else temp->Next=0;
}
temp=temp->Next;
i++;
}
/*return Head; */
}
--------------------------------------------------------------------------
SPISOK1.H
--------------------------------------------------------------------------
#ifndef SPISOK1_H
#define SPISOK1_H
struct element
{
int x;
element *Next;
};

class List
{
int *x;
int N;
element *Head;
public:
List() {Head=0;}
~List();
void Input(int x);
void Input(int N);
void Print();
int List:perator == (const List &);
const List& operator=(const List&);
List& operator +(List &);
void operator--();
};
#endif
-------------------------------------------------------------------
SPISOK2.CPP
-------------------------------------------------------------------
#include <conio.h>
#include "SPISOK1.H"
#include <iostream.h>
void main()
{
int x,N;
clrscr();
List lst;

cout<<"N = ";cin>>N;
Ist.Input(N);

for (int i=0;i<N;i++)
{
cout<<i+1<<". x = "; cin>>x;
lst.Input(x);
}

lst.Print();

List lst2;

cout<<endl<<"N = ";cin>>N;
Ist2.Input(N);

for (i=0;i<N;i++)
{
cout<<i+1<<". x = "; cin>>x;
lst2.Input(x);
}

lst2.Print();

if(lst==lst2)
{
cout<<endl<<"Spisok 1 raven spisku 2\n";
}
else
{
lst=lst2;
cout<<endl<<"Spisok 1 posle kopirovaniya: ";
lst.Print();
}
getch();
}


Это сообщение отредактировал(а) RobertEn - 29.3.2015, 19:03
PM MAIL   Вверх
rudolfninja
Дата 30.3.2015, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 341
Регистрация: 19.2.2013
Где: г. Минск

Репутация: 1
Всего: 6



Цитата(RobertEn @ 29.3.2015,  19:02)

void List::Input(int N)//здесь должна быть функция добавления количества элементов, что тут написать?
{

};

В цикле от 0 до N вызывать метод Input(int x); =)
Что-то я, как обычно, не понял, что надо делать =)
Вообще, если надо добавить сразу несколько элементов, то вызываешь в цикле от 0 до N вызывать метод Input(int x);, где х - какое-то значение по умолчанию. Например, 0.
А можно вообще по-модному сделать: с переменным числом аргументов:

Код

void List::Input(int N, ...)
{
int *p = &N; // получаем адрес первого аргумента
p++; // переходим на второй аргумент
for(int i = 0; i < N; i++)
{
    Input(*p);
    p++;
}
}


Использоваться это потом будет так:
Код

// первый параметр всегда должен указывать количество последующих параметров
list.Input(3, 3, 14, 15); 

После этого в список будет добавлено три новых элемента со значениями 3, 14 и 15

Это сообщение отредактировал(а) rudolfninja - 30.3.2015, 11:42
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0394 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.