29.04.2017, 10:31 [+3 UTC]
в нашей команде: 1 926 чел. | участники онлайн: 5 (рекорд: 21)

:: РЕГИСТРАЦИЯ

:: консультации

:: задать вопрос

:: все разделы

:: правила

:: новости

:: участники

:: доска почёта

:: форум

:: блоги

:: поиск

:: статистика

:: наш журнал

:: наши встречи

:: наша галерея

:: отзывы о нас

:: поддержка

:: руководство

Версия системы:
7.41 (25.02.2017)

Общие новости:
23.02.2017, 09:51

Форум:
28.04.2017, 08:08

Последний вопрос:
28.04.2017, 19:28

Последний ответ:
29.04.2017, 08:51

Последняя рассылка:
28.04.2017, 22:45

Писем в очереди:
1

Мы в соцсетях:

Наша кнопка:

RFpro.ru - здесь вам помогут!

Отзывы о нас:
30.11.2009, 15:29 »
Cimus
Действительно опечатался в адресах, благо Вы это подметили! Спасибо! [вопрос № 174703, ответ № 257113]
31.12.2011, 14:07 »
Посетитель - 385948
СПАСИБО ОГРОМНОЕ !!!! С НОВЫМ ГОДОМ И РОЖДЕСТВОМ ВАС !!!!!! [вопрос № 185003, ответ № 269404]
27.12.2010, 01:03 »
Дмитрий Олегович
И вновь качественный ответ! Большое спасибо! Очень рад что на форуме есть такие люди как вы! [вопрос № 181620, ответ № 265113]

РАЗДЕЛ • С / С++

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Лучшие эксперты в этом разделе

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 642
Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 189
mklokov
Статус: 4-й класс
Рейтинг: 88

Перейти к консультации №:
 

Консультация онлайн # 190175
Раздел: • С / С++
Автор вопроса: user8351 (Посетитель)
Отправлена: 27.11.2016, 13:13
Поступило ответов: 1

Здравствуйте! Дана следующая задача:

Нужно подготовить текстовый файл. Прочитать данные из этого файла и сформировать двусвязный список. Написать программу, подсчитывающую количество элементов списка, которые начинаются с того же символа, что и следующий элемент списка. После завершения работы со списками освободить занимаемую ими динамическую память. К сожалению, не могу провести подсчет этих самых элементов . smile Вот что у меня пока получилось:

Приложение:

Состояние: Консультация закрыта

Ответ # 274366 от Лысков Игорь Витальевич (Старший модератор)

Здравствуйте, user8351!
Можно сделать, например, так:

/*Нужно подготовить текстовый файл. 
  Прочитать данные из этого файла и сформировать двусвязный список. 
  Написать программу, подсчитывающую количество элементов списка, 
  которые начинаются с того же символа, что и следующий элемент списка. 
  После завершения работы со списками освободить занимаемую ими динамическую память
*/
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <iomanip>
#include <iostream>
#include <cstdlib>

using namespace std;

struct Node	  ///Структура являющаяся звеном списка
{
	char x;	///Значение x будет передаваться в список
	Node *Next,*Prev; ///Указатели на адреса следующего и предыдущего элементов списка
};

class List	///Создаем тип данных Список
{
	Node *Head,*Tail; ///Указатели на адреса начала списка и его конца
public:
	List():Head(NULL),Tail(NULL){}; ///Инициализируем адреса как пустые
	~List(); //Деструктор
	void Show(); //Функция отображения списка на экране
	void Add(char x); //Функция добавления элементов в список
	int CountEquals();
};

List::~List() //Деструктор
{
	while (Head) //Пока по адресу на начало списка что-то есть
	{
		Tail=Head->Next; //Резервная копия адреса следующего звена списка
		delete Head; //Очистка памяти от первого звена
		Head=Tail; //Смена адреса начала на адрес следующего элемента
	}
}

void List::Add(char x)
{
	Node *temp=new Node; //Выделение памяти под новый элемент структуры
	temp->Next=NULL;  //Указываем, что изначально по следующему адресу пусто
	temp->x=x;//Записываем значение в структуру

	if (Head!=NULL) //Если список не пуст
	{
		temp->Prev=Tail; //Указываем адрес на предыдущий элемент в соотв. поле
		Tail->Next=temp; //Указываем адрес следующего за хвостом элемента
		Tail=temp; //Меняем адрес хвоста
	}
	else //Если список пустой
	{
		temp->Prev=NULL; //Предыдущий элемент указывает в пустоту
		Head=Tail=temp; //Голова=Хвост=тот элемент, что сейчас добавили
	}
}

int List::CountEquals()
{
	int	k;
	Node *temp;

	for(k=0, temp=Head; temp->Next; temp=temp->Next)	//пока есть следующий
		k += (temp->x == temp->Next->x);	//добавляем результат сравнения, если равно, то будет 1
	return k;
}

void List::Show()
{
//ВЫВОДИМ СПИСОК С НАЧАЛА
	Node *temp=Head; //Временно указываем на адрес первого элемента
	while (temp!=NULL) //Пока не встретим пустое значение
	{
		cout<<temp->x<<" "; //Выводим каждое считанное значение на экран
		temp=temp->Next; //Смена адреса на адрес следующего элемента
	}
	cout<<"\n";
 }


int main()
{
	SetConsoleCP(1251);
	SetConsoleOutputCP(1251);
	system("CLS");
	
	List lst; //Объявляем переменную, тип которой есть список

	FILE *myfile;
	myfile = fopen ("data.txt", "r");

	if(myfile == NULL)
	{
		printf("Ошибка. Не могу открыть файл.\n");
		return 0;
	}
	else
		printf("Файл открыт.\n");

	char str[30];
	fgets(str, 29, myfile); ///считываем строку из файла

	for (int i = 0; str[i]; i++)
		lst.Add(str[i]); //Добавляем в список элементы

	lst.Show(); //Отображаем список на экране

	printf("%\nКол-во эл-ов,\nкот. начинаются с\nтого же символа, что и след.эл-т: %d\n\n",lst.CountEquals());
	system("PAUSE");
	
}


Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 01.12.2016, 21:47

5
нет комментария
-----
Дата оценки: 03.12.2016, 09:51

Рейтинг ответа:

0

[подробно]

Сообщение
модераторам

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Мини-форум консультации № 190175
user8351
Посетитель

ID: 399277

# 1

= общий = | 03.12.2016, 09:51 | цитировать цитировать  | профиль профиль  |  отправить письмо в личную почту пейджер

Огромное спасибо за Вашу помощь!

 

Возможность оставлять сообщения в мини-форумах консультаций доступна только после входа в систему.
Воспользуйтесь кнопкой входа вверху страницы, если Вы зарегистрированы или пройдите простую процедуру регистрации на Портале.

Яндекс Rambler's Top100

главная страница | поддержка | задать вопрос

Время генерирования страницы: 0.14848 сек.

© 2001-2017, Портал RFPRO.RU, Россия
Авторское право: ООО "Мастер-Эксперт Про"
Калашников О.А.  |  Гладенюк А.Г.
Версия системы: 7.41 от 25.02.2017
Бесплатные консультации онлайн