24.01.2017, 12:09 [+3 UTC]
в нашей команде: 1 769 чел. | участники онлайн: 7 (рекорд: 21)

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

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

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

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

:: правила

:: новости

:: участники

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

:: форум

:: блоги

:: поиск

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

:: наш журнал

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

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

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

:: поддержка

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

Версия системы:
7.40 (02.09.2016)

Общие новости:
31.12.2016, 18:43

Форум:
22.01.2017, 19:33

Последний вопрос:
24.01.2017, 10:27

Последний ответ:
23.01.2017, 15:54

Последняя рассылка:
23.01.2017, 16:45

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

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

Наша кнопка:

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

Отзывы о нас:
18.11.2010, 22:09 »
Кокин Антон Вадимович
Спасибо. Так и сделал и получил 90Гб серию smile Два с половиной часа конвертировалось в ави без сжатия. Теперь вот думаю, оно мне надо? Слишком много мороки... [вопрос № 180828, ответ № 264169]
22.10.2009, 08:16 »
Яна
Огромное спасибо! Вы помогли мне очень вовремя. [вопрос № 173506, ответ № 255686]
29.03.2010, 11:30 »
Бондаренко Кирилл Андреевич
Огромное спасибо за помощь! [вопрос № 177519, ответ № 260433]

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

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

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

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

Лысков Игорь Витальевич
Статус: Старший модератор
Рейтинг: 753
solowey
Статус: 5-й класс
Рейтинг: 221
Асмик Гаряка
Статус: Советник
Рейтинг: 202

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

Консультация онлайн # 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.13572 сек.

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