Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RFPRO.RU

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

Коцюрбенко Алексей aka Жерар
Статус: Мастер-Эксперт
Рейтинг: 355
∙ повысить рейтинг »
solowey
Статус: 5-й класс
Рейтинг: 212
∙ повысить рейтинг »
Степанов Иван /REDDS
Статус: 4-й класс
Рейтинг: 101
∙ повысить рейтинг »

∙ С / С++

Номер выпуска:1900
Дата выхода:30.12.2016, 18:45
Администратор рассылки:Андрей Кузнецов aka Dr_Andrew (Старший модератор)
Подписчиков / экспертов:23 / 17
Вопросов / ответов:2 / 2

Консультация # 190338: Здравствуйте! Прошу помощи в следующем вопросе: Подготовить текстовый файл, содержащий не менее 10 слов. Прочитать данные из этого файла и сформировать двусвязный список, элементы которого имеют тип STRING. Написать программу, подсчитывающую количество элементов списка, которые начинаются и оканчиваются одним и тем же символом. После заве...
Консультация # 190340: Оператор FOR. напишите программу плес. Вывести «столбиком» следующие числа: 2,1, 2,2, 2,3, ..., 2,8....

Консультация # 190338:

Здравствуйте! Прошу помощи в следующем вопросе:

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

Буду благодарна, если код будет написан на Си. Я смогла написать только основные функции работы с двусвязным и списком и не уверена, что и они верны. Заранее спасибо за помощь!

Дата отправки: 25.12.2016, 13:48
Вопрос задал: Usagisan (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, Usagisan!
1) Вы говорите о С, а сами используете элементы C++, такие как new, cin , cout smile
2) Полем данных должна быть строка, а не double
3) Должен быть двунаправленный список, т.е. должны быть и голова, и хвост
3) Надо читать с файла, а не с консоли
Посмотрите, как я сделал (на чистом С):

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <malloc.h>

typedef struct ListNode1 
{ 
	char*		info;	//указатель на строку
	ListNode1*	next;	//указатель на следующий элемент 
	ListNode1*	prev;	//указатель на предыдущий элемент 
}ListNode1; 

//указатели на голову и хвост определим в глобальной памяти
ListNode1* pHead = NULL;
ListNode1* pTail = NULL;

//параметром укажем только значение поля info
void AddToList(char * info) 
{ 
	ListNode1* q = (ListNode1*) malloc(sizeof(ListNode1));	//выделим память под узел
	q->info = (char*)malloc(strlen(info)+1);				//и под строку
	strcpy(q->info, info);									//копируем строку
	q->next = NULL;											//узел всегда будет последним
	if (pTail)							//указатель хвоста непуст?
	{ 
		q->prev = pTail;				//для нового предыдущим станет старый хвост
		pTail->next = q;				//для бывшего хвоста следующим - новый
	} 
	else 
	{									//новый - единственный, будет и головой, и хвостом
		q->prev = NULL;					//для головы предыдущего нет
		pHead = q;						//голова списка - новый узел
	} 
	pTail = q;							//новый становится новым хвостом
} 

//параметром укажем имя файла
int FormList1(char *fName)
{ 
	char string[1024];					//буфер для чтения

	FILE	*fp = fopen(fName, "r") ;	//открываем файл на чтение
	
	if (fp)								//открылся?
	{
		while (-1 != fscanf(fp, "%s", string))	//читаем, пока читается
		{
			AddToList(string);			//и включаем очередную строку в список
		}
		fclose(fp);						//закрываем файл
		return true;					//файл считан
	}
	return false;						//ошибка, скорее всего, файл не найден
} 

//подсчитываем слова, у которых одинаковые первая и последняя буквы
int GetCount(void)
{
	int count = 0;
	ListNode1 * node;

	for(node=pHead; node; node=node->next)	//по всем узлам
										//сравниваем буквы, если равны, получим 1, иначе 0
		count += (node->info[0] == node->info[strlen(node->info)-1]);

	return count;						//возвращаем счетчик
}

void DelList()							//освобождаем память списка
{										//воспользуемся указателями pHead и pTail, все равно они уже не нужны
	while(pHead)						//пока что-то есть
	{
		pTail = pHead->next;			//сохраним адрес следующего
		free(pHead->info);				//сначала освободим память строки
		free(pHead);					//потом память самого узла
		pHead = pTail;					//адрес следующего
	}
}

int main()
{
	if (FormList1("test.txt"))			//формируем список из файла
	{
		printf("Count = %d\n", GetCount());	//выводим количество слов с одинаковыми первой и последней буквой
		DelList();						//освобождаем память
	}
	else
		printf ("File 'test.txt' not found!\n");	//файл не найден
	return 0;
}

test.txt
asdasda 3123123 treter 456456 sdfsdf 45454544 
asdasdas gdfgdfgdfg tttttt 5555555 434343 5555556765

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

5
нет комментария
-----
Дата оценки: 26.12.2016, 18:52

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

НЕ одобряю 0 одобряю!

Консультация # 190340:

Оператор FOR.
напишите программу плес.
Вывести «столбиком» следующие числа: 2,1, 2,2, 2,3, ..., 2,8.

Дата отправки: 25.12.2016, 15:47
Вопрос задал: evgenlol228 (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует solowey (5-й класс):

Здравствуйте, evgenlol228!

#include <iostream>
using namespace std;

int main()
{
    for (double i = 2.1; i < 2.9; i += 0.1)
    {
        cout << i << endl;
    }

    return 0;
}

Консультировал: solowey (5-й класс)
Дата отправки: 26.12.2016, 11:09
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное