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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.81
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
#1

Черезстрочное слияние - C++

30.09.2009, 21:53. Просмотров 1984. Ответов 33
Метки нет (Все метки)

Появилось вот такое задание по C++:
Написать программу на языке C++ чересстрочного слияния (т.е. первая строка в выходном файле - это первая строка из первого файла, вторая строка в выходном файле - это первая строка из второго файла, третья строка в выходном файле - вторая строка из первого файла и т.д.) двух текстовых файлов с удалением в каждой строке слов после которых стоит любой знак препинания.

Алгоритм программы:
C++
1
2
3
4
5
6
                           \\здесь описание всяких переменных 
void main() {}        \\основная программа
void s1() {}           \\процедура, открывающая 1 и 2 файл на чтение с диска
vois s2() {}           \\процедура, создающая третий файл и модифицирующая его (копирование строк)
void s3() {}           \\процедура, которая выполняет удаление (после знаков препинания)
void s4() {}           \\процедура, закрывающая все файлы
Подскажите, пожалуйста, правильно выбран алгоритм реализации данной программы...
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2009, 21:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Черезстрочное слияние (C++):

Слияние массивов - C++
я новичек в программировании. Помогите пожалуйста решить слудеющию задачу на С++. Заданы три упорядоченных по возрастанию массива f,...

Слияние массивов - C++
Даны два массива. Массив А состоит из N элементов и отсортирован по возрастанию. Массив В состоит из М элементов и отсортирован по...

Бинарное слияние - C++
Не получается реализовать алгоритм. Хелп плз. http://img246.imageshack.us/img246/6600/binslimf5.jpg Вот что у меня получается. ...

Слияние массивов - C++
Задан массив A из N элементов и массив B из M элементов. Сформировать массив L из массивов A и B путем их слияния так, чтобы сначала...

слияние списков - C++
помогите с написание программы!!! нужно написать программу которая объединяет два упорядоченных списка в один. Функция merge должна...

Слияние деревьев - C++
Сижу, мучаюсь, не могу понять что подразумевается в задании о слиянии деревьев. Подвесить вершину второго дерева к какому-нить листу 1-го?...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
08.10.2009, 14:53  [ТС] #16
не чтото вообще мне непонятно, что ты написал...
Попробовал вот так сделать...
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
#pragma hdrstop
#include <tchar.h> 
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#pragma argsused
int main()
{
 FILE *f1=fopen("D:\\work\\file_1.txt","r");
 FILE *f2=fopen("D:\\work\\file_2.txt","r");
 FILE *o=fopen("D:\\work\\B.txt ","w+");
 char c,c2;
 while ((c!=EOF) || (c2!=EOF)){
  while ((c=fgetc(f1)) && ((c!='\n') && (c!=EOF))) {
    fputc(c,o);
    };
    fputc('\n',o);
  while ((c2=fgetc(f2)) && ((c2!='\n') && (c2!=EOF)))  {
    fputc(c2,o);
    }
    fputc('\n',o);
 }
 fclose(f1);
 fclose(f2);
 fclose(o);
    return 0;
}
в данном случае получается вот так
file_1.txt
C++
1
2
3
4
5
6
First codex was used for accounting, but 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
similar to the pagan texts, which are usually written in the form of scrolls.
file_2.txt
C++
1
2
3
4
5
6
7
8
9
10
11
12
At the beginning of XIV century in Western Europe appeared woodcutting (it was developed 
long before the East). In the matrix of woodcuts depicting Pages 
cut from a piece of wood. It can be dipped in ink and 
used to make multiple copies of a page. Books, as well as playing 
cards and religious pictures, began to produce woodcuts. But the creation of the book was 
laborious process, since each page had to do his carving. Besides,
First codex was used for accounting, but 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
similar to the pagan texts, which are usually written in the form of scrolls.
b.txt
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
First codex was used for accounting, but 
At the beginning of XIV century in Western Europe appeared woodcutting (it was developed 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
long before the East). In the matrix of woodcuts depicting Pages 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
cut from a piece of wood. It can be dipped in ink and 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
used to make multiple copies of a page. Books, as well as playing 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
cards and religious pictures, began to produce woodcuts. But the creation of the book was 
similar to the pagan texts, which are usually written in the form of scrolls.
laborious process, since each page had to do his carving. Besides,
 
First codex was used for accounting, but 
 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
 
similar to the pagan texts, which are usually written in the form of scrolls.
Вот думаю реально ли в оба while впихнуть чтото наподобее
C++
1
if c==' ' return;
или вот не пробел, а как бы тогда обозначить что файл закончился?
ну или может не return чтобы он к этому while уже не обращался...
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
08.10.2009, 15:15 #17
Вариантов много может быть. Например, так:
C++
1
2
if (c!=EOF)
 fputc('\n',o);
Добавлено через 2 минуты
Дальше
C++
1
((c=fgetc(f1)) && ((c!='\n') && (c!=EOF)))
Я не уверен, что сперва считается символ, а потом переменная "с" будет учавствовать в выражении. Если ты уверен в обратном, значит, ты знаешь. Я бы ещё проверил.
0
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
08.10.2009, 20:56  [ТС] #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
#pragma hdrstop
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#pragma argsused
int main()
{
 FILE *f1=fopen("D:\\work\\file_1.txt","r");
 FILE *f2=fopen("D:\\work\\file_2.txt","r");
 FILE *o=fopen("D:\\work\\B.txt ","w+");
 char c,c2;
 while ((c!=EOF) || (c2!=EOF)){
  while ((c=fgetc(f1)) && ((c!='\n') && (c!=EOF))) {
    fputc(c,o);
    };
    if (c!=EOF) fputc('\n',o);
  while ((c2=fgetc(f2)) && ((c2!='\n') && (c2!=EOF)))  {
    fputc(c2,o);
    }
    if (c2!=EOF) fputc('\n',o);
  }
 fclose(f1);
 fclose(f2);
 fclose(o);
    return 0;
}
file_1.txt
C++
1
2
3
4
5
6
First codex was used for accounting, but 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
similar to the pagan texts, which are usually written in the form of scrolls.
file_2.txt
C++
1
2
3
4
5
6
7
8
9
10
11
At the beginning of XIV century in Western Europe appeared woodcutting (it was developed 
long before the East). In the matrix of woodcuts depicting Pages 
cut from a piece of wood. It can be dipped in ink and 
used to make multiple copies of a page. Books, as well as playing 
cards and religious pictures, began to produce woodcuts. But the creation of the book was 
laborious process, since each page had to do his carving. Besides,
Above you can view the video clip, which was added by our users. You can view it directly
 on our site, or download it to your computer and transfer it to the usual format. 
Avi (DivX) with the help of the program YouTube Downloader. You can download it here. Use 
it to convert video to normal video file, which you can enjoy with friends at any moment, 
even if you're somewhere on a picnic at the weekend.
B.txt
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
First codex was used for accounting, but 
At the beginning of XIV century in Western Europe appeared woodcutting (it was developed 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
long before the East). In the matrix of woodcuts depicting Pages 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
cut from a piece of wood. It can be dipped in ink and 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
used to make multiple copies of a page. Books, as well as playing 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
cards and religious pictures, began to produce woodcuts. But the creation of the book was 
similar to the pagan texts, which are usually written in the form of scrolls.laborious process, since each page had to do his carving. Besides,
Above you can view the video clip, which was added by our users. You can view it directly
 on our site, or download it to your computer and transfer it to the usual format. 
Avi (DivX) with the help of the program YouTube Downloader. You can download it here. Use 
it to convert video to normal video file, which you can enjoy with friends at any moment, 
even if you're somewhere on a picnic at the weekend.
только вот место где закончился первый файл, т.е. последняя строчка первого и последняя строчка второго файлов, слились...
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
08.10.2009, 22:06 #19
Это не страшно. Нам нужно, чтобы когда файл закончится, написалось \n То есть если
c==EOF пусть пишется перевод на другую строку. Но только один раз, а потом прога
пусть игнорирует эту инструкцию.
Для этого введём переменную-семафор и инициализируем её false.
Теперь ты делай присвоение c= \n только если семафор равен false.

Как только с станет равной EOF, ПОСЛЕДНИЙ РАЗ ПРИСВАИВАЙ "с" значение \n и СРАЗУ ЖЕ
присваивай семафору значение true

Всё, теперь уже переменной с значение \n не присвоится, поскольку семафор равен true
А мы написали, что присваиваем c==\n только если он false
1
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
09.10.2009, 14:02  [ТС] #20
Цитата Сообщение от kravam Посмотреть сообщение
Это не страшно. Нам нужно, чтобы когда файл закончится, написалось \n То есть если
c==EOF пусть пишется перевод на другую строку. Но только один раз, а потом прога
пусть игнорирует эту инструкцию.
Для этого введём переменную-семафор и инициализируем её false.
Теперь ты делай присвоение c= \n только если семафор равен false.

Как только с станет равной EOF, ПОСЛЕДНИЙ РАЗ ПРИСВАИВАЙ "с" значение \n и СРАЗУ ЖЕ
присваивай семафору значение true

Всё, теперь уже переменной с значение \n не присвоится, поскольку семафор равен true
А мы написали, что присваиваем c==\n только если он false
Если я правильно понял то нужно
C++
1
2
3
4
5
bool h;
...
if (c=='\n' || c==EOF) { c='\n'; h=true;}
...
if (c2=='\n' || c2==eof) { c2='\n'; h=true;}
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
09.10.2009, 15:00 #21
Код C++
1
2
3
4
5
6
7
while (c=fgetc(f1)) { fputc(c,o); if (c==EOF) fputc('\n',o); if (c=='\n') break;
};

Как окончательный вариант предлагаю такое решение.
Разберись в нём и протестируй.
Раз за разом мы будем в цикле считывать символы и их печатать, ни о чем не боеспокоясь.
Пока нам не встретится EOF или \n

Допустим, нам встретился EOF
То есть последней строкой в файле была такая строка :
asdfgh"EOF"

asdfgh нами считано. И надо добавить в конес строки \n (хотя его там нет, надо самим пихать.)

Вот пихаем. Пишем
Код C++
1
2
3
if (c==EOF) fputc('\n',o);

И всё на этом. Теперь мы уже НИКОГДА не зайдём в это цикл, согласись?
А если считаем знак \n, то просто тупо запишем его в файл и всё, по команде break выходим на хрен из цикла.
И так для обоих файлов.

Но тут есть одно.
Если будет, допустим, так

asdfg\nEOF
Значит, произойдёт так:
Считается строка, потом \n. Вроде всё нормально. Теперь бы нам выйти их цикла, ан нет. Прога опять зайдёт в цикл, сразу же наткнётся на EOF и прибавит \n, который нам даром не нужен. Получается в конце два \n

Значит что?
Значит, если в конце EOF, то пусть символ \n прописывается не безусловно, а только в том случае, если предыдущий прописанный сивол НЕ БЫЛ \n

То есть вот сюда
C++
1
2
if (c==EOF// Вот сюда)
   fputc('\n',o);
Надо написать такое условие, словами если:
Если предыдущий считанный символ не был \n
Вот подумай, как это реализоватью.
1
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
09.10.2009, 15:25  [ТС] #22
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
#pragma hdrstop
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#pragma argsused
int main()
{
 FILE *f1=fopen("D:\\work\\file_1.txt","r");
 FILE *f2=fopen("D:\\work\\file_2.txt","r");
 FILE *o=fopen("D:\\work\\B.txt ","w+");
 char c,c2;
 while ((c!=EOF) || (c2!=EOF)){
  while (c=fgetc(f1)) {
  fputc(c,o);
  if (c==EOF)
   fputc('\n',o);
  if (c=='\n')
   break;
 };
   while (c2=fgetc(f2)) {
  fputc(c2,o);
  if (c2==EOF)
   fputc('\n',o);
  if (c2=='\n')
   break;
 };
 }
 fclose(f1);
 fclose(f2);
 fclose(o);
    return 0;
}
блин что-то я уже совсем перестал понимать что делается...
по теории если правильно понял о чем ты работает...
на практике без проблем дочитывает до конца первого файла, но как только конец первого файла был достигнут... вниз пошли буквы 'я' причем в огромном кол-ве... выходной файлик получился аж на 10 метров...
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
09.10.2009, 16:25 #23
Я тебе сказал протестировать. А не паниковать.
Уж мог бы разобраться-то хоть немного!
Извини, конечно.
Пиши так.

C++
1
2
3
((c=fgetc(f1))!= EOF)
...
((c2=fgetc(f2))!= EOF)
Разберись, СПРОСИ, что непонятно и протестируй на многих-многих вариантах.

Попробуй взять а правило выводить данные в консоль сперва, а потом уже в файл Всегда видно, портачишь или нет. Но это так, на будующее.
1
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
09.10.2009, 16:56  [ТС] #24
Цитата Сообщение от kravam Посмотреть сообщение
Я тебе сказал протестировать. А не паниковать.
Уж мог бы разобраться-то хоть немного!
Извини, конечно.
Пиши так.

C++
1
2
3
((c=fgetc(f1))!= EOF)
...
((c2=fgetc(f2))!= EOF)
Разберись, СПРОСИ, что непонятно и протестируй на многих-многих вариантах.

Попробуй взять а правило выводить данные в консоль сперва, а потом уже в файл Всегда видно, портачишь или нет. Но это так, на будующее.
Попробовал потестить на разных вариантах, чтобы первый файл был больше второго, второй больше первого... но проблемка сохранилась, где строки закончились меньшего файла на ней печатается дальше идущая строка большего файла...
file_1.txt
C++
1
2
3
4
5
6
First codex was used for accounting, but 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
similar to the pagan texts, which are usually written in the form of scrolls.
file_2.txt
C++
1
2
3
4
5
6
7
8
9
10
11
At the beginning of XIV century in Western Europe appeared woodcutting (it was developed 
long before the East). In the matrix of woodcuts depicting Pages 
cut from a piece of wood. It can be dipped in ink and 
used to make multiple copies of a page. Books, as well as playing 
cards and religious pictures, began to produce woodcuts. But the creation of the book was 
laborious process, since each page had to do his carving. Besides,
Above you can view the video clip, which was added by our users. You can view it directly
 on our site, or download it to your computer and transfer it to the usual format. 
Avi (DivX) with the help of the program YouTube Downloader. You can download it here. Use 
it to convert video to normal video file, which you can enjoy with friends at any moment, 
even if you're somewhere on a picnic at the weekend.
B.txt
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
First codex was used for accounting, but 
At the beginning of XIV century in Western Europe appeared woodcutting (it was developed 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
long before the East). In the matrix of woodcuts depicting Pages 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
cut from a piece of wood. It can be dipped in ink and 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
used to make multiple copies of a page. Books, as well as playing 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
cards and religious pictures, began to produce woodcuts. But the creation of the book was 
similar to the pagan texts, which are usually written in the form of scrolls.laborious process, since each page had to do his carving. Besides,
Above you can view the video clip, which was added by our users. You can view it directly
 on our site, or download it to your computer and transfer it to the usual format. 
Avi (DivX) with the help of the program YouTube Downloader. You can download it here. Use 
it to convert video to normal video file, which you can enjoy with friends at any moment, 
even if you're somewhere on a picnic at the weekend.
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
09.10.2009, 17:36 #25
Тогда семафор. Разбирайся.

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
#pragma hdrstop
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//#pragma argsused
int main()
{
 FILE *f1=fopen("fail1.cc","r");
 FILE *f2=fopen("fail2.cc","r");
 FILE *o=fopen("fail4.cc ","w+");
 char c,c2;
 char semafor_1;
 char semafor_2;
 while ((c!=EOF) || (c2!=EOF)){
  while ((c=fgetc(f1))!= EOF) {
   fputc(c,o);
    semafor_1= c;
    if (c=='\n')
     break;
  };
  if (c==EOF&& semafor_1!= '\n') {
   fputc('\n',o);
  }
  while ((c2=fgetc(f2))!= EOF) {
   fputc(c2,o);
   semafor_2= c2;
   if (c2=='\n')
    break;
  };
  if (c2==EOF&& semafor_2!= '\n') {
   fputc('\n',o);
  }
}
 fclose(f1);
 fclose(f2);
 fclose(o);
        return 0;
}
1
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
09.10.2009, 22:20  [ТС] #26
Цитата Сообщение от kravam Посмотреть сообщение
Тогда семафор. Разбирайся.

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
#pragma hdrstop
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//#pragma argsused
int main()
{
 FILE *f1=fopen("fail1.cc","r");
 FILE *f2=fopen("fail2.cc","r");
 FILE *o=fopen("fail4.cc ","w+");
 char c,c2;
 char semafor_1;
 char semafor_2;
 while ((c!=EOF) || (c2!=EOF)){
  while ((c=fgetc(f1))!= EOF) {
   fputc(c,o);
    semafor_1= c;
    if (c=='\n')
     break;
  };
  if (c==EOF&& semafor_1!= '\n') {
   fputc('\n',o);
  }
  while ((c2=fgetc(f2))!= EOF) {
   fputc(c2,o);
   semafor_2= c2;
   if (c2=='\n')
    break;
  };
  if (c2==EOF&& semafor_2!= '\n') {
   fputc('\n',o);
  }
}
 fclose(f1);
 fclose(f2);
 fclose(o);
        return 0;
}
Но и с переменной-семафором работает все равно не так
Исходники те же, теперь в месте конца первого и продолжения второго все ОК, но далее опять появляются пустые строки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
First codex was used for accounting, but 
At the beginning of XIV century in Western Europe appeared woodcutting (it was developed 
with the development of parchment in the III century BC. e., gradually began to displace the papyri. 
long before the East). In the matrix of woodcuts depicting Pages 
This is already happening in the Christian world. The reasons for the adoption of the manuscript as the main type of books 
cut from a piece of wood. It can be dipped in ink and 
several: it is economical because you can use both sides of the paper, it is easy to hide; 
used to make multiple copies of a page. Books, as well as playing 
It was convenient and accessible. Perhaps the Christian writers used the original purpose, that they were not 
cards and religious pictures, began to produce woodcuts. But the creation of the book was 
similar to the pagan texts, which are usually written in the form of scrolls.
laborious process, since each page had to do his carving. Besides,
 
Above you can view the video clip, which was added by our users. You can view it directly
 
 on our site, or download it to your computer and transfer it to the usual format. 
 
Avi (DivX) with the help of the program YouTube Downloader. You can download it here. Use 
 
it to convert video to normal video file, which you can enjoy with friends at any moment, 
 
even if you're somewhere on a picnic at the weekend.
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
09.10.2009, 23:11 #27
Кошмар.
Я совсем забыл, что семафор на то и семафор, чтобы его изменять! Моя вина.
Вот вариант. Должен сканать. Если сканает, мы его в четырёх местах украсим.

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
#pragma hdrstop
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//#pragma argsused
int main()
{
 FILE *f1=fopen("fail1.cc","r");
 FILE *f2=fopen("fail2.cc","r");
 FILE *o=fopen("fail4.cc ","w+");
 char c,c2;
 char semafor_1;
 char semafor_2;
 while ((c!=EOF) || (c2!=EOF)){
  while ((c=fgetc(f1))!= EOF) {
   fputc(c,o);
    semafor_1= c;
    if (c=='\n')
     break;
  };
  if (c==EOF&& semafor_1!= '\n') {
   fputc('\n',o);
   
   //Вот из-за этой строки всё было.Ну, ни хрена, тепрь ни под каким предлогом прога 
   //сюда  не  зайдёт и символ конца строки не напечатается лишний раз.
   semafor_1= '\n';
  }
  while ((c2=fgetc(f2))!= EOF) {
   fputc(c2,o);
   semafor_2= c2;
   if (c2=='\n')
    break;
  };
  if (c2==EOF&& semafor_2!= '\n') {
   fputc('\n',o);
   semafor_2= '\n';
  }
}
 fclose(f1);
 fclose(f2);
 fclose(o);
        return 0;
}
1
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
09.10.2009, 23:43  [ТС] #28
Цитата Сообщение от kravam Посмотреть сообщение
Кошмар.
Я совсем забыл, что семафор на то и семафор, чтобы его изменять! Моя вина.
Вот вариант. Должен сканать. Если сканает, мы его в четырёх местах украсим.

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
#pragma hdrstop
#include <tchar.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//#pragma argsused
int main()
{
 FILE *f1=fopen("fail1.cc","r");
 FILE *f2=fopen("fail2.cc","r");
 FILE *o=fopen("fail4.cc ","w+");
 char c,c2;
 char semafor_1;
 char semafor_2;
 while ((c!=EOF) || (c2!=EOF)){
  while ((c=fgetc(f1))!= EOF) {
   fputc(c,o);
    semafor_1= c;
    if (c=='\n')
     break;
  };
  if (c==EOF&& semafor_1!= '\n') {
   fputc('\n',o);
   
   //Вот из-за этой строки всё было.Ну, ни хрена, тепрь ни под каким предлогом прога 
   //сюда  не  зайдёт и символ конца строки не напечатается лишний раз.
   semafor_1= '\n';
  }
  while ((c2=fgetc(f2))!= EOF) {
   fputc(c2,o);
   semafor_2= c2;
   if (c2=='\n')
    break;
  };
  if (c2==EOF&& semafor_2!= '\n') {
   fputc('\n',o);
   semafor_2= '\n';
  }
}
 fclose(f1);
 fclose(f2);
 fclose(o);
        return 0;
}
офигеть, спасибо огромное...

Цитата Сообщение от kravam Посмотреть сообщение
Если сканает, мы его в четырёх местах украсим.
Что же здесь украшать?
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
10.10.2009, 00:00 #29
А мы объединим просто, чтобы строек меньше было.
Вместо 17-ой и 18-ой напиши так:
C++
1
semafor_1=fputc(c,o);
Вместо 23-ей и 24-ой так
C++
1
semafor_1= fputc('\n',o);
Так лаконичнее. Не хер плодить лишние сущности. И так код громоздкий получился.
Надо препода задобрить.
И вот втором цикле аналогичные строчки объедини.
1
kandrey58region
1 / 1 / 0
Регистрация: 11.03.2009
Сообщений: 109
10.10.2009, 13:29  [ТС] #30
kravam, спасибо за помощь...
Что можешь посоветовать дальше?? Попытаться соединить вот эту часть с твоей прогой, и в ней уже со знаками препинания исправлять, или вообще заново начать делать??
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2009, 13:29
Привет! Вот еще темы с ответами:

Слияние массивов на с++ - C++
Добродень всем.задача такая:массив структур размера N(в моем случае 100).разбить на ленты.т.о получается 10 лент по 10 элементов в каждой...

Слияние массивов - C++
Получить массив С(k), упорядоченный по возрастанию, путем слияния массивов A(n) и B(m), упорядоченных перед этим по возрастанию, где k = n...

Слияние отсортированных массивов. - C++
задача: есть двумерный целочисленный массив n на n в котором каждая строка отсортирована по возрастанию. надо слить его в одномерный...

Слияние бинарных деревьев - C++
Слияние - это функция выбора элемента из двух Берем два дерева; функцию, которая выбирает один элемент из двух T fun(T x1, Tx2); ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.10.2009, 13:29
Ответ Создать тему
Опции темы

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