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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2015, 18:50   #1
Robert_
 
Регистрация: 29.03.2015
Сообщений: 5
По умолчанию C++ Нужно в программе ввести функцию Input, багодаря которой мы вводим количество элементов

Как это правильно сделать?
Вообще у нас есть список, в котором мы делаем перезагрузку операций:
+ – объединить списки (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(r)
{
    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::operator == (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();
}

Последний раз редактировалось Stilet; 29.03.2015 в 19:08.
Robert_ вне форума Ответить с цитированием
Старый 29.03.2015, 21:37   #2
Aleksander550
Форумчанин
 
Регистрация: 07.01.2014
Сообщений: 124
По умолчанию

исправил несколько ошибок.
сделано единым файлом
Код:
#include <conio.h>
#include <iostream>
//#include "SPISOK1.H"

using namespace std;

//--------------------------------------------------------------------------
//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 InputSize(int size){
        	N = size;
		}
        void Print();
        const int operator == (const List &);
        List& operator=(const List&);
        List& operator +(List &);
        void operator--();
};

//--------------------



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;
    }
}

const 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\n";
        return 0;
    } 
    //тут был косяк
    element *temp1=Head, *temp2=list2.Head;

    while (temp1!=0) {
        if (temp1->x != temp2->x){
            cout<<"\nZnacheniya spiskov ne ravni\n";
            return 0;        	
		}
        temp1=temp1->Next;
        temp2=temp2->Next;
	}

    return 1;
}

List& List::operator=(const List &list2) { //перегрузка оператора присваивания
	//~List()
    while (Head!=0) { //пока по адресу не пусто
        element *temp=Head->Next;//временная переменная для хранения адреса следующего элемента
        delete Head;//освобождаем адрес, обозначающий начало
    	Head=temp;//меняем адрес на следующий
	}	
	
    N = list2.N;
    
	element *temp2 = list2.Head;
	for (int i = 0; i < N; i++){
	
    	Input(temp2->x);
		temp2=temp2->Next;   	
	}	
	
    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(r) {
                temp->Next=r->Next;
                delete [] r;
            } else temp->Next=0;
        }
        temp=temp->Next;
        i++;
    }
    /*return Head; */
}



//#endif

//-------------------------------------------------------------------
//SPISOK2.CPP
//-------------------------------------------------------------------
//Код:
//



//#include <conio.h>
//#include "SPISOK1.H"
//#include <iostream.h>
int main() {
    int x,N;
   // clrscr();
    List lst;

    cout<<"N = ";
    cin>>N;
    lst.InputSize(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;
    lst2.InputSize(N);

    for (int 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<<"\n\nSpisok 1 posle kopirovaniya: \n";
        lst.Print();
    }
    getch();
    return 0;
}
Для чего нужна переменная ::List.x ?
#define TRUE FALSE //счастливой отладки
Aleksander550 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
программа в paskal нужно ввести функцию с массивом от минус пяти до пяти с шагом 0,5 JUliaR Помощь студентам 2 08.04.2013 14:48
Массивы Х(n) и У(m) (n, m<=15). Найти количество элементов массива не лежащих в диапазоне от А до В. использовать функцию (Паскаль LegalasAlex Паскаль, Turbo Pascal, PascalABC.NET 1 25.05.2012 22:52
Ввести матрицу 5х10 и найти в ней количество элементов, больших и меньших среднего арифметического (Delphi) Юлийа Помощь студентам 15 05.03.2012 19:59
Получение формы, к которой принадлежит INPUT поле kardinal94 Работа с сетью в Delphi 0 26.11.2011 21:35
Описать функцию zero1(x), значением которой является первый из элементов вектора x, ссылающихс на число 0 polarity Помощь студентам 4 31.05.2010 13:03