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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2013, 11:55   #1
Mako-chi
 
Регистрация: 29.05.2013
Сообщений: 3
Вопрос Линейный список (С++)

Нужно доделать лабораторную работу.
Все, что смогла понять или найти, сделала. Только все равно в программе ошибок дофига. Не разбираюсь я в программировании
Суть задачи:
Нужно создать линейный список по уже имеющийся структуре(это у меня было в первой лабе)
1. Линейный список
а) добавление записи
б) удаление записи
в) редактирование полей записи
г) поиск элемента по заданному полю
д) сортировка по заданному полю
2. чтение списка из файла и записи в файл
3. написать консольный интерфейс

Частично я сделала.
Структура(Тут только структура, остальное ниже!)
Код:
#include <iostream>
 
#include <conio.h>
 
#include <stdio.h>
 
using namespace std;
 
 
 
struct book
 
{ char name [10];
 
long int number;
 
int birthday[3];
 
};
 
 
int main()
 
 
{ 
book N[5];
 
N[0].name[10]= 'Mariya'; N[0].number=89622293936; N[0].birthday[0]=1994; N[0].birthday[1]=12; N[0].birthday[2]=15;
 
N[1].name[10]= 'Sasha'; N[1].number=89098050308; N[1].birthday[0]=1995; N[1].birthday[1]=2; N[1].birthday[2]=21;
 
N[2].name[10]= 'Katya'; N[2].number=89508003050; N[2].birthday[0]=1991; N[2].birthday[1]=5; N[2].birthday[2]=1;
 
N[3].name[10]= 'Sveta'; N[3].number=89135054108; N[3].birthday[0]=1987; N[3].birthday[1]=8; N[3].birthday[2]=15;
 
N[4].name[10]= 'Vika'; N[4].number=89037814849; N[4].birthday[0]=1990; N[4].birthday[1]=6; N[4].birthday[2]=30;
 
 
 
for( int i=0; i<3; i++)
 
cout<<N[i].name<<endl<<N[i].numder<<endl<<N[i].birthday[0]<<"."<<N[i].birthday[1]<<"."<<N[i].birthday[0]<<endl<<endl;
 
return 0;
 
}
То, что я сделала
Код:
#include <iostream>
#include <fstream>
#include <locale>

using namespace std;
 

struct book
{ 
    char name[10];
    long int number;
    int birthday[2];
    book *next
 
    void input(ifstream &fin){
        fin >> name >> number >> birthday[0] >>
            birthday[1] >> birthday[2];
    }
 
    
    void output(){
        cout << name << '\t' << number << '\t' << birthday[0] << '.' <<
            birthday[1] << '.' << birthday[2] << '\n';
    }
};

  book *head=NULL, // сначала список пуст
  *add=NULL, // указатель на на новый добавляемый элемент
  *del=0, // указатель на удаляемый элемент
  *cur=0, // указатель на текущий элемент

/*добавление в начало списка*/

void addAtFront()
{
add=new book;
add->next=head
cin>>add->name;
cin>>add->number;
cin>>add->birthday[0];
cin>>add->birthday[1];
cin>>add->birthday[2];
head=add;
}



/*удаление первого элемента из непустого списка*/

void removeAtFront()

{ del=head;
if(del==NULL)
 wcout << L"Список пуст!\n";
            if(first -> next == NULL)   
       {     delete del;
             del=NULL;
        }
else
    {
   book *cur=del->next; 
 
                delete del;       
                del = cur;    
    }

}
/*Поиск элемента по заданному полю*/

{
char find[10];
bool absent=true;
int i=0;
cin>>find;
if(!head)
cout<<"Список пуст!"<<endl;
else
{cur=head;
do
{++i;
if(!strcmp(cur->name, find))
{ cout<<"Номер элемента: "<<i<<endl;
absent=false;
} cur=cur->next;
}
while (cur!=NULL);
if(absent) cout<<"Такого элемента в списке нет"<<endl;
}

 void showItem()
{ 
if(cur==0)
  wcout << L"Список пуст!";
  else
   {
    wcout << L"Список: ";
    while(cur != NULL)          
    {
       cur->book->output();        
       cur=cur->next;      
   }
 }
cout << endl;
}
Mako-chi вне форума Ответить с цитированием
Старый 29.05.2013, 13:39   #2
revizor
Форумчанин
 
Аватар для revizor
 
Регистрация: 20.01.2013
Сообщений: 146
По умолчанию

Здесь ошибка:
Цитата:
Код:
int birthday[2];
    book *next
 
    void input(ifstream &fin){
        fin >> name >> number >> birthday[0] >>
            birthday[1] >> birthday[2];
    }
массив birthday[2] состоит из 2-х элементов birthday[0] и birthday[1]. А birthday[2] это уже выход за границу
revizor вне форума Ответить с цитированием
Старый 30.05.2013, 11:11   #3
Mako-chi
 
Регистрация: 29.05.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от revizor Посмотреть сообщение
Здесь ошибка:


массив birthday[2] состоит из 2-х элементов birthday[0] и birthday[1]. А birthday[2] это уже выход за границу
У меня все в этом правильно. В С++ отсчет идет с нулевого элемента.
Mako-chi вне форума Ответить с цитированием
Старый 30.05.2013, 11:55   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
У меня все в этом правильно. В С++ отсчет идет с нулевого элемента.
Нет, это - не правильно. Повторяю (и если не согласны - внимательно перечитайте используемый учебник):
Код:
int array[2]; //Объявлен массив из двух int-ов
array[0] = 12; //Обращение к первому элементу массива
array[1] = 17; //Обращение ко второму элементу массива
array[2] = 42; //Обращение за пределы массива, результат не определён
Abstraction вне форума Ответить с цитированием
Старый 30.05.2013, 12:23   #5
Mako-chi
 
Регистрация: 29.05.2013
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Нет, это - не правильно. Повторяю (и если не согласны - внимательно перечитайте используемый учебник):
Я уже поняла, что не правильно. Не о том подумала. Спасибо.
Mako-chi вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ЛИНЕЙНЫЙ СПИСОК kalosha-stepa Паскаль, Turbo Pascal, PascalABC.NET 2 25.10.2012 21:57
линейный список Nelson1992 Помощь студентам 1 26.11.2011 01:40
C++,линейный список katerunechka Помощь студентам 0 08.10.2011 11:38
Линейный список doter Общие вопросы C/C++ 1 20.02.2011 21:36
Линейный список Black_Ak24 Паскаль, Turbo Pascal, PascalABC.NET 2 04.01.2008 15:00