Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
1

Создать текстовый файл, содержащий изображения чисел, расположенные в два столбц

25.05.2009, 18:45. Просмотров 3185. Ответов 39
Метки нет (Все метки)

Текст задачи
Даны два файла целых чисел одного размера с именами Name1 и Name2. Создать текстовый файл с именем NameT, содержащий изображения этих чисел, расположенные в два столбца шириной по 30 символов: первый содержит числа из файла Name1, второй- из файла Name2. Вначале и конце каждой строки текстового файла ввести разделитель"|". Числа выравниваются по правому краю столбца.
В кратце. Третий файл должен содержать цифры из первых двух,записанные в столбик.УМОЛЯЮ ПОМОГИТЕ!!!!!

Вот текст моей проги
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
#include<iostream.h>;
#include <string.h>
#include <fstream>
#include<stdio.h>;
#pragma argsused
void main( void )
{
FILE *Name1;
FILE *Name2;
FILE *NameT;
char* file_name1 = "Name1.txt";
char* file_name2 = "Name2.txt";
char* file_nameT = "NameT.txt";
char load_string[50] = "none";
char w[50] = "none";
char q[50] = "none";
int  i,j;
Name1 = fopen( file_name1, "wt" );
Name2 = fopen( file_name2, "wt" );
   for( i=0; i<5; i++ )
   {
     fprintf( Name1, "|%d| ", i );
   }
   for( j=0; j<5; j++ )
   {
     fprintf( Name2, "|%d| ", j );
   }
fclose( Name1 );
fclose(Name2);
 
Name1 = fopen( file_name1, "r" );
Name2 = fopen( file_name2, "r" );
NameT = fopen( file_nameT, "wt" );
if( Name1 != 0 )
{
fgets( w, 50 , Name1 );
cout << "Name1 : \n\n" << w <<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
if( Name2 != 0 )
{
fgets( q, 50 , Name2 );
cout << "Name2  \n\n" << q <<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
fputs(w,NameT);
fputs(q,NameT);
fclose(NameT);
fclose(Name1);
fclose(Name2);
NameT = fopen( file_nameT, "r" );
if( NameT != 0 )
{
fgets( load_string, 50 , NameT );
cout << "NameT : \n\n" << load_string<<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
fclose(NameT);
system("pause");
}
//---------------------------------------------------------------------------
Тут осталось тока сделать вывод третьего файла в столбик с выравниванием.Это как раз я и не знаю как сделать.Помогите плиз позарез сегодня нужна.

Добавлено через 58 минут 38 секунд
Помогите пожалуйста,если завтра не сдам из универа могу вылететь((((((((((((
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2009, 18:45
Ответы с готовыми решениями:

Дано число k (< 10) и текстовый файл, содержащий более k строк. Создать новый текстовый файл, содержащий k последних строк исходного файла
Дано число k (&lt; 10) и текстовый файл, содержащий более k строк. Создать новый...

Создать текстовый файл, содержащий программу на С++
Моя задача звучит следующим образом: &quot;Дан текстовый файл, содержащий...

Дан текстовый файл. Создать символьный файл, содержащий все знаки препинания, встретившиеся в текстовом файле
Дан текстовый файл. Создать символьный файл, содержащий все знаки препинания,...

Дан символ 'C' (прописная латинская буква) и текстовый файл. Создать строковый файл, содержащий все слова из исходного файла
Дан символ 'C' (прописная латинская буква) и текстовый файл. Создать строковый...

Дан символ 'C' (прописная латинская буква) и текстовый файл. Создать строковый файл, содержащий все слова из исходного файла, начинающиеся этой буквой
Дан символ 'C' (прописная латинская буква) и текстовый файл. Создать строковый...

39
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 19:09 2
Я что-то с трудом могу понять, что делает программа на данный момент?
Точнее - я вижу, что, но не понимаю смысла.

Такой вопрос: накладывается ли на задачу требование, с помощью каких средств ввода/вывода реализовывать задачу? Есть возможность это сделать стандартными средствами с помощью структуры FILE и функций fopen/fclose/fgets и т.д., либо с помощью классов потоков ввода/вывода fstream.
Экспертами в C++ не рекомендуется использовать в одной программе оба эти средства.

PS: вообще, к задачам на файлы (по крайней мере в нашем университете), рекомендовали псать отдельную программу для создания исходного файла (исходных файлов), и отдельно программу для их обработки - то есть не лепить всё в одну кучу.

ну или можно реализовать это с использованием функций хотя бы. Например формирование исходных файлов (если принцип один, то дважды вызвать одну и ту же функцию для двух разных файлов) в одной функции, а обработка файла (файлов) с заданным именем и именем для выходного файла в другой.
0
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
25.05.2009, 19:22  [ТС] 3
На данный момент программа создает два файла и заполняет его цифрами далее копирует в 3 файл и выводит на экран. С тобой полностью согласен что код у меня кривой.Это из-за того что я дела с файлами не имел(((((((.Если не сложно можешь написать код программы которая будет отвечать требованиям поставленным в задании. Буду безмерно благодарен.

Добавлено через 3 минуты 10 секунд
А насчет средств если согласишься написать прогу используй те средства которые ты считаешь нужнымии более удобными, но одна просьба если это возможно без функций(но если так лучше возражать не буду)
0
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 19:24 4
Какими средствами делать - имеет значение? Классами потоков (C++, <fstream>), или функциями (C, <cstdio>)?



PS: переделывай свою прогармму просто для создания двух файлов, а я напишу пока программу для слияния двух файлов.
Давай договоримся насчет парочки констант и их имен. Например, сколько чисел в строке - известно, или же это необходимо определять по ходу обработки? Сколько строк? Считать известными и фиксированными?
И еще - разделители должны быть в начале и в конце строки каждого файла (в том числе и результирующего, как я понял). А в твоей программе, насколько я понимаю, получается каждое число с двух сторон имеет по рпзделителю, а значит между соседними числами - два разделителя, что кажется совсем неправильным.
0
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
25.05.2009, 19:28  [ТС] 5
классами потоков. Если сделаешь век не забуду
0
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 19:31 6
Цитата Сообщение от Андрей Полынкин Посмотреть сообщение
классами потоков. Если сделаешь век не забуду
ну раз классами потоков, тогда тебе придется переделать в своей прогармме все места взаимодействия с файлами с помощью методов этих классов .
0
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
25.05.2009, 19:37  [ТС] 7
а ты можешь это сделать плиз просто я же говорю я не имел дело с файлами вообще практически ни чего не понимаю(((((( Если чесно я бы переделал есил знал файлы а так приходится просить(((((( Ты напишешь?

Добавлено через 2 минуты 2 секунды
а через stdio.h ,который по ходу я использовал много надо переделывать
0
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 19:46 8
на самом деле сложного ничего нет.

вот пример работы с файлом с помощью fstream:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fstream fp;
if(!fp.open(Name1,"r"))
{
cout << "There was any problem to open the file" << endl;
return -1;
}
int num;
while(!fp.eof())
{
fp >> num;
cout << num << '\t';
}
 
fp.close();
1
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
25.05.2009, 19:52  [ТС] 9
Понятно.Ты так и не сказал много надо исправить в моей проге используя функции которые я взял ,для того чтобы сделать вывод в 2 столбца?
0
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 19:55 10
а она вообще работает?

если бы ты поместил сюда код, используя обрамление тегами для языка C++ (они в форме редактирования сообщения есть), нам было бы легче общаться, т.к. там есть нумерация строк.
0
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
25.05.2009, 20:00  [ТС] 11
то что написано работает.Создает 2 файла ,записывает цифры(в строчку) копирует цифры в 3 файл(тоже в строчку(((((((((() и выводит на экран

Добавлено через 1 минуту 50 секунд
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include<iostream.h>;
#include <string.h>
#include <fstream>
#include<stdio.h>;
#pragma argsused
void main( void )
{
FILE *Name1;
FILE *Name2;
FILE *NameT;
char* file_name1 = "Name1.txt";
char* file_name2 = "Name2.txt";
char* file_nameT = "NameT.txt";
char load_string[50] = "none";
char w[50] = "none";
char q[50] = "none";
int  i,j;
Name1 = fopen( file_name1, "wt" );
Name2 = fopen( file_name2, "wt" );
   for( i=0; i<5; i++ )
   {
     fprintf( Name1, "|%d| ", i );
   }
   for( j=0; j<5; j++ )
   {
     fprintf( Name2, "|%d| ", j );
   }
fclose( Name1 );
fclose(Name2);
 
Name1 = fopen( file_name1, "r" );
Name2 = fopen( file_name2, "r" );
NameT = fopen( file_nameT, "wt" );
if( Name1 != 0 )
{
fgets( w, 50 , Name1 );
cout << "Name1 : \n\n" << w <<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
if( Name2 != 0 )
{
fgets( q, 50 , Name2 );
cout << "Name2  \n\n" << q <<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
fputs(w,NameT);
fputs(q,NameT);
fclose(NameT);
fclose(Name1);
fclose(Name2);
NameT = fopen( file_nameT, "r" );
if( NameT != 0 )
{
fgets( load_string, 50 , NameT );
cout << "NameT : \n\n" << load_string<<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
fclose(NameT);
system("pause");
}
0
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 20:08 12
Нажми "правка" для своего сообщения и выдели весь код программы, затем нажми кнопочку с надписью "C++", она под кнопками для управления начертанием шрифта (B,I,U).

Добавлено через 4 минуты 20 секунд
PS: и если можно, то текст задания не в кратце, а полностью - как преподаватель дал .
0
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
25.05.2009, 20:26  [ТС] 13
Программа рабочая. Создает два файла, заполняет его числами(в строчку), создает 3 файл, копирует в него числа из первых двух и выводит на экран(тоже в строчку(((((((()

Добавлено через 59 секунд
текст задания я привел полностью как препод дал

Добавлено через 1 минуту 21 секунду
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include<iostream.h>;
#include <string.h>
#include <fstream>
#include<stdio.h>;
#pragma argsused
void main( void )
{
FILE *Name1;
FILE *Name2;
FILE *NameT;
char* file_name1 = "Name1.txt";
char* file_name2 = "Name2.txt";
char* file_nameT = "NameT.txt";
char load_string[50] = "none";
char w[50] = "none";
char q[50] = "none";
int  i,j;
Name1 = fopen( file_name1, "wt" );
Name2 = fopen( file_name2, "wt" );
   for( i=0; i<5; i++ )
   {
     fprintf( Name1, "|%d| ", i );
   }
   for( j=0; j<5; j++ )
   {
     fprintf( Name2, "|%d| ", j );
   }
fclose( Name1 );
fclose(Name2);
 
Name1 = fopen( file_name1, "r" );
Name2 = fopen( file_name2, "r" );
NameT = fopen( file_nameT, "wt" );
if( Name1 != 0 )
{
fgets( w, 50 , Name1 );
cout << "Name1 : \n\n" << w <<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
if( Name2 != 0 )
{
fgets( q, 50 , Name2 );
cout << "Name2  \n\n" << q <<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
fputs(w,NameT);
fputs(q,NameT);
fclose(NameT);
fclose(Name1);
fclose(Name2);
NameT = fopen( file_nameT, "r" );
if( NameT != 0 )
{
fgets( load_string, 50 , NameT );
cout << "NameT : \n\n" << load_string<<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
fclose(NameT);
system("pause");
}
Добавлено через 38 секунд
вот так

Добавлено через 5 минут 18 секунд
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
#include<iostream.h>;
#include <string.h>
#include <fstream>
#include<stdio.h>;
#pragma argsused
void main( void )
{
FILE *Name1;
FILE *Name2;
FILE *NameT;
char* file_name1 = "Name1.txt";
char* file_name2 = "Name2.txt";
char* file_nameT = "NameT.txt";
char load_string[50] = "none";
char w[50] = "none";
char q[50] = "none";
int  i,j;
Name1 = fopen( file_name1, "wt" );
Name2 = fopen( file_name2, "wt" );
   for( i=0; i<5; i++ )
   {
     fprintf( Name1, "|%d| ", i );
   }
   for( j=0; j<5; j++ )
   {
     fprintf( Name2, "|%d| ", j );
   }
fclose( Name1 );
fclose(Name2);
 
Name1 = fopen( file_name1, "r" );
Name2 = fopen( file_name2, "r" );
NameT = fopen( file_nameT, "wt" );
if( Name1 != 0 )
{
fgets( w, 50 , Name1 );
cout << "Name1 : \n\n" << w <<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
if( Name2 != 0 )
{
fgets( q, 50 , Name2 );
cout << "Name2  \n\n" << q <<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
fputs(w,NameT);
fputs(q,NameT);
fclose(NameT);
fclose(Name1);
fclose(Name2);
NameT = fopen( file_nameT, "r" );
if( NameT != 0 )
{
fgets( load_string, 50 , NameT );
cout << "NameT : \n\n" << load_string<<"\n"<< endl;
}
else
{
cout << "File not found !!!" << endl;
}
fclose(NameT);
system("pause");
}
 
//---------------------------------------------------------------------------
Добавлено через 1 минуту 58 секунд
Блин запутался то ли добавляет сообщение то ли нет сори за флуд одними и теми же сообщениями
0
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 20:32 14
По заданию не совсем понятно - только в конечном файле должны быть разделители в начале и конце каждой строки, или в исходных тоже.
Из задания неясно - сколько чисел в строке. И что значит ширина 30 символов? Либо просто выводить числа подряд из файла, и когда общая ширина строки достигнет 30 символов, то продолжать вывод с новой строки, либо это какой-то намек на количество чисел в строке.

И собственно, числа-то какие - целые, или вещественные?

Добавлено через 1 минуту 2 секунды
(Попробуй просто обновить страницу. если не получится, то лишнее удалишь. у меня тоже бывало такое)

PS: просто в зависимости от условия решение может быть как элементарным, так и не слишком тривиальным. Например, если количество чисел в строке не фиксировано, то нужно будет его определить еще по входному файлу. К тому же, если разделители присутствуют во входных файлах тоже, то придется работать со строками (чего не хочется), что весьма осложнит задачу и выигрыша от использования потоков не будет.
0
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
25.05.2009, 20:39  [ТС] 15
Числа в исходных вещественные, что же касается разделителей то только в конечном файле анасчет столбцов они должны быть просто шириной 30 т.е. разделител как я понял обозначают нширину столбца
0
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 20:43 16
ну так по сколько же чисел в строке у каждого файла?
0
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
25.05.2009, 20:54  [ТС] 17
лучше по одной например
1
2
3
4
5

Добавлено через 37 секунд
рандомно как я заполни его просто
0
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 21:08 18
по одному числу на 30 символов???

я тут почитал о форматировании при работе с потоками.

если скажем ограничить поле вывода вещественного числа шестью символами, то по 5 получится.
Тогда ширина равна 6, прижимаем к правому краю, всегда есть запятая и число знаков после запятой равно двум. какое максимальное количесво символов при таких настройках будет занимать число?
считаем:
- один символ на знак;
- один символ для цифры перед точкой;
- один символ на точку;
- две цифры после точки
- и еще может быть E{+/-} и от одной до трех (кажется цифр) для числа типа double и до двух цифр для знака экспоненты для чисел типа float.

Что имеем: 10 символов - необходимый минимум ширины поля при таких параметрах плюс еще один пробел, чтобы соседние числа не сливались.

Значит берем ширину поля 15 и выводим по 2 числа в строку .

Добавлено через 1 минуту 6 секунд
PS: рандомно - это не как ты, а с вызовом функции rand() .
0
Андрей Полынкин
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 20
25.05.2009, 21:11  [ТС] 19
насчет rand() яобразно сказалнасчет остального логично, я с тобой согласен делаем 15 а преподу завтра объясню
0
Xardas
15 / 15 / 2
Регистрация: 08.05.2009
Сообщений: 81
25.05.2009, 21:20 20
в общем я минут через 30-40 - сейчас занят немного.
0
25.05.2009, 21:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2009, 21:20

Создать текстовый файл, содержащий предложения, удовлетворяющие заявкам, вводимым пользователем с клавиатуры
Создайте файл NuRest.txt, который будет содержать предложения, которые...

Создать текстовый файл, содержащий таблицу значений заданной функции на указанном промежутке
Даны вещественные числа А, В и целое число N. Создать текстовый файл,...

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке
Пожалуйста, помогите решить задачу в C++!!! Дан файл целых чисел. Создать...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru