Форум программистов, компьютерный форум CyberForum.ru

Работа с файлами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Teredo
0 / 0 / 0
Регистрация: 04.07.2010
Сообщений: 28
19.11.2010, 18:17     Работа с файлами #1
Задача по информатике:
В файле input.txt задано арифметическое выражение состоящее из цифр, букв, скобок и знаков арифметических операций. Но вирус удалил из данного файла некоторые скобки, стоящие в начале и в конце выражения.Написать программу, выводящую в файл output.txt исправленное выражениею Максимальная длина исходной строки не более 100 символов.

например:
input.txt = (3+(2*6))*3(((5/4-3)*9-(7-4) - output.txt = ((3+(2*6))*3(((5/4-3)*9-(7-4))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2010, 18:17     Работа с файлами
Посмотрите здесь:

Работа с файлами!!! C++
C++ РАБОТА С ФАЙЛАМИ
C++ Работа с файлами
C++ Работа с файлами!
C++ [C++] Работа с файлами
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
19.11.2010, 22:06     Работа с файлами #2
Да... Стоило выдумывать такое задание...
Читаете входной файл в строку. В выходной файл пишете открывающую скобку. Затем пишете туда считанную строку. Затем пишите закрывающую скобку. Хотя сомневаюсь, что вы умеете это делать, но просто не поняли алгоритм...
Teredo
0 / 0 / 0
Регистрация: 04.07.2010
Сообщений: 28
19.11.2010, 23:10  [ТС]     Работа с файлами #3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
#include <stdio.h>
#include <string>
using namespace std;
 
int main()
{
 
FILE *file;
char* file_name = "input.txt";
char load_string[50] = "none";
file = fopen( file_name, "r" ); 
fgets( load_string, 50 , file ); 
string a = load_string;
fclose(file);
 
 
char* file_name2 = "output.txt";
file = fopen( file_name2, "a" ); 
fputs( "(", file );
fputs( a, file );
fputs( ")", file );
 
system("pause");
}
Ошибка :
1>------ Построение начато: проект: 12323, Конфигурация: Debug Win32 ------
1> 1231232.cpp
1>c:\documents and settings\admin\мои документы\visual studio 2010\projects\12323\12323\1231232.cpp(12): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(234): см. объявление "fopen"
1>c:\documents and settings\admin\мои документы\visual studio 2010\projects\12323\12323\1231232.cpp(19): warning C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 10.0\vc\include\stdio.h(234): см. объявление "fopen"
1>c:\documents and settings\admin\мои документы\visual studio 2010\projects\12323\12323\1231232.cpp(21): error C2664: fputs: невозможно преобразовать параметр 1 из "std::string" в "const char *"
1> Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.11.2010, 23:28     Работа с файлами #4
Teredo, Вы или не правильно списали пример, или он написан с ошибкой:
output.txt = ((3+(2*6))*3(((5/4-3)*9-(7-4))
Кол-во скобок ( - 7
Кол-во скобок ) - 5
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.11.2010, 00:06     Работа с файлами #5
Да тут не в этом суть... Считать же ничего не надо)))
А для того, чтобы работало, в 21 строке надо a заменить на a.c_str()
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.11.2010, 00:21     Работа с файлами #6
silent_1991, Вряд ли, что суть только в этом.
Задача стоит такая: Написать программу, выводящую в файл output.txt исправленное выражениею, а не просто считать строку из входного файла. Вывести эту строку в выходной файл добавив скобку ( в начале строки и скобку ) в конце строки.
Скорее всего требуется выровнять число скобок ( и ). Но их не порсто выровнять в кол-ве, а выровнять их с арифметически правильной стороны. Например:
на входе: (..(..(..(..)..)..).. - здесь точками обозначены арифметические операции с числами
Тут просто добавляем одну скобку ) в конце и все, а например (с тем же кол-вом скобок):
на входе: ..)..)..)...(...(..(..(..
Тут добавляем три скобки ( в начало строки, и четыре скобки ) в конец строки.
Teredo
0 / 0 / 0
Регистрация: 04.07.2010
Сообщений: 28
20.11.2010, 00:28  [ТС]     Работа с файлами #7
Программа выводит ошибку!!
вот скрин:
http://www.imagepost.ru/images/305/z...lxM1Oi9SAn.jpg
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.11.2010, 00:30     Работа с файлами #8
valeriikozlov, да, похоже вы правы... Тут надо подумать.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.11.2010, 00:38     Работа с файлами #9
Предварительное мое решение выглядит так:
сначало идем с лево направо (перед этим int col=0)
- если скобка ) то col--;
-если скобка ( то co++;
И вот максимальное отрицательное значение в ходе прохода и есть кол-во скобок ( в начале строки.
Потом идем с право налево (перед этим снова int col=0)
- если скобка ( то col--;
-если скобка ) то co++;
И здесь максимальное отрицательное значение в ходе прохода и есть кол-во скобок ) в конце строки.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.11.2010, 05:18     Работа с файлами #10
valeriikozlov, да, вы знаете, сегодня проснувшись с утра, я за пать минут пришёл к такому же алгоритму)))
NightmareZ
 Аватар для NightmareZ
1336 / 559 / 37
Регистрация: 31.03.2009
Сообщений: 1,907
20.11.2010, 05:26     Работа с файлами #11
Цитата Сообщение от Teredo Посмотреть сообщение
Задача по информатике:
В файле input.txt задано арифметическое выражение состоящее из цифр, букв, скобок и знаков арифметических операций. Но вирус удалил из данного файла некоторые скобки, стоящие в начале и в конце выражения.Написать программу, выводящую в файл output.txt исправленное выражениею Максимальная длина исходной строки не более 100 символов.

например:
input.txt = (3+(2*6))*3(((5/4-3)*9-(7-4) - output.txt = ((3+(2*6))*3(((5/4-3)*9-(7-4))
Бред какой-то, а не задача. Как я узнаю, где должны скобки располагаться? Вариантов правильного их расположения в общем случае можно придумать over 9000.

Например,
input.txt = 1 + 2 * 3

output.txt = (1 + 2) * 3
или
output.txt = 1 + (2 * 3)
или
output.txt = (1 + 2 * 3)
и т.п.

Хорошей и интересной бы задача была, если бы давалось повреждённое выражение + результат этого выражения и нужно бы было исходное выражение восстановить.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
20.11.2010, 05:45     Работа с файлами #12
NightmareZ, думаю, суть в том, что удалены только внешние скобки, их и надо восстановить (по расположению внутренних).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2010, 14:06     Работа с файлами
Еще ссылки по теме:

C++ Работа с файлами
C++ Работа с файлами
C++ Работа с файлами

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Teredo
0 / 0 / 0
Регистрация: 04.07.2010
Сообщений: 28
20.11.2010, 14:06  [ТС]     Работа с файлами #13
Да, нужно восстановить только внешние скобки!)
Yandex
Объявления
20.11.2010, 14:06     Работа с файлами
Ответ Создать тему
Опции темы

Текущее время: 13:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru