Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195

Элементы файлов f1 и f2 упорядочены по не убыванию

10.06.2016, 09:41. Показов 2203. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал такую программу, но она работает не корректно... уже голову сломал, а понять не могу где ошибся.
Тестовые данные:
(Первый файл) - {1 3 7 7 8 9 9 12 14 17}
(Второй файл) - {4 5 5 7 7 7 8 11 11 15}
(Файл вывода в моем случае) - {1 3 4 5 5 7 7 7 7 7 8 11 11 158 9 9 12 14 17}
P.S - не очень силен в программировании, просто ткните носов в ошибку...
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
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <io.h>
 
 
void association (FILE *f1, FILE *f2, FILE *f3) {
fseek(f1,0,SEEK_END);
long sizef1 = ftell(f1);
fseek(f2,0,SEEK_END);
long sizef2 = ftell(f2);
 
int a,b,i,j;
fseek(f1,0, SEEK_SET);
fseek(f2,0, SEEK_SET);
i = 0; j = 0;
while ((i <= sizef1-1) || (j <= sizef2-1)){
  if ((i <= sizef1-1) && (j <= sizef2-1)){
    fseek(f1, i, SEEK_SET);
    a = getc(f1);
    fseek(f2, j, SEEK_SET);
    b = getc(f2);
    if (a<b){
      fputc(a, f3);
      i++;}
    else{
      fputc(b, f3);
      j++;}
}
  else if ( j > sizef2-1) {
    fseek(f1,i, SEEK_SET);
    a = getc(f1);
    fputc(a, f3);
    i++;}
  else if ( i > sizef1-1){
    fseek(f2, j, SEEK_SET);
    b = getc(f2);
    fputc(b, f3);
    j++;}
}
}
 
int main(){
setlocale(LC_ALL, "RUS");
char fname1[20],fname2[20],fname3[20];
 
printf("Введите имя первого файла с расширением: ");
scanf("%s", fname1);
printf("Введите имя второго файла с расширением: ");
scanf("%s", fname2);
printf("Введите имя третьего файла с расширением, для записи результата: ");
scanf("%s", fname3);
 
FILE *f1, *f2, *f3;
 
f1 = fopen(fname1, "r");
f2 = fopen(fname2, "r");
f3 = fopen(fname3, "w");
 
association(f1, f2, f3);
 
fclose(f1);
fclose(f2);
fclose(f3);
 
return 0;
}
Добавлено через 1 час 9 минут
Забыл дать саму задачу. "Элементы файлов f1 и f2 упорядочены по не убыванию. Объединить эти элементы в один файл f3, также упорядоченный по не убыванию."

Добавлено через 8 часов 6 минут
Ребят, помогите пожалуйста, уже все мозги сломал...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.06.2016, 09:41
Ответы с готовыми решениями:

Проверить, упорядочены ли элементы по не убыванию
помогите решить задачу на языке С# Заменить первый положительный элемент в массиве на три элемента, равных заданному значению. Если такая...

Определить упорядочены ли элементы массива по убыванию
Ввести одномерный массив А , вывести его. Определить упорядочены ли элементы массива по убыванию. Если не упорядочены, то определить номер...

Определить, упорядочены ли элементы массива по убыванию
Задача: Определить, упорядочены ли элементы массива по убыванию. Данный код работает для положительных элементов. С отрицательными...

28
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
10.06.2016, 09:45
Надо считать числа в массив и отсортировать. Результат сохранить в файл.
1
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195
10.06.2016, 11:33  [ТС]
Я тоже так хотел, но это просто интереснее. (С массивами самый очевидный вариант)
Типа считать из 1 и 2 файла по словам все значения, потом пузырьком, к примеру, отсортировать - ну это правда глупый вариант, так как будет переполнен буфер (из-за статического массива), а что бы создать динамический, нужно знать количество слов, которые тоже нельзя посчитать без массива.

Добавлено через 6 минут
Хотя ты мне подал интересную идею... (отпишусь если получится)

Добавлено через 1 час 35 минут
Чет я затух тут, как считать именно число в массив, а не символ?
Допустим такие тестовые данные:
file1 (1 2 4 9 11 24 57)
Что бы занеслось в массив так {1, 2, 4, 9, 11, 24, 57}
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
10.06.2016, 11:56
Тут описана ф-ция fread. Еще можно посмотреть тут как работать с файлами через поток чтения.

Добавлено через 11 минут
Вообще можешь сортировать в процессе чтения, используя для результирующего хранилища например список. Или можно воспользоваться трюком со std::set:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <set>
using namespace std;
 
int main()
{
    set<int> sorted;
    sorted.insert(5);
    sorted.insert(6);
    sorted.insert(3);
    set<int>::iterator it;
    it = sorted.begin();
    while (it != sorted.end())
    {
        cout << *it << endl;
        ++it;
    }
 
    return 0;
}
При последовательном выводе из std::set ты получишь отсортированный массив. Убывание или возрастание будет зависить от направления прохода по элементам)

Добавлено через 2 минуты
Единственный минус последнего решения: не получится добавить одно и то же значение дважды. Но для этого у нас есть std::multiset
1
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195
10.06.2016, 12:00  [ТС]
Чтож так сложно, просто ад. Уже 15 часов сижу и все не могу понять. Как этим fread пользоваться в моем случае?
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
10.06.2016, 12:11
Цитата Сообщение от Blekzet Посмотреть сообщение
Уже 15 часов сижу и все не могу понять
Лучше делать перерывы) Отвечаю помогает) Утро вечера и все дела...

Цитата Сообщение от Blekzet Посмотреть сообщение
Как этим fread пользоваться в моем случае?
C++
1
2
3
4
5
6
7
8
9
int num;
while (feof(f1)
{
    if(fread(&num, sizeof(int), 1, f1)!=1)
       if(feof(f1))
            break;
    fseek(f1, 1, SEEK_SET); //Пропуск пробела м/ду цифрами
    /*тут у нас есть считанное число в num, делаем с ним что хочешь*/
}
1
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195
10.06.2016, 12:22  [ТС]
Цитата Сообщение от UltraPenguin Посмотреть сообщение
Лучше делать перерывы) Отвечаю помогает) Утро вечера и все дела...
ПФФФФФФФФФФФФФФФФФФФФФФФФФФ, отдых для слабаков.
Цитата Сообщение от UltraPenguin Посмотреть сообщение
int num;
C++
1
2
3
4
5
6
7
8
while (feof(f1)
{
* * if(fread(&num, sizeof(int), 1, f1)!=1)
* * * *if(feof(f1))
* * * * * * break;
* * fseek(f1, 1, SEEK_SET); //Пропуск пробела м/ду цифрами
* * /*тут у нас есть считанное число в num, делаем с ним что хочешь*/
}
C++
1
2
3
4
5
while (!feof(f1)){
    if(fread(&num, sizeof(int), 1, f1)!=1)
    fseek(f1, 1, SEEK_SET);
    a[i] = num;
    i++;}
типа так?
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
10.06.2016, 12:27
Цитата Сообщение от Blekzet Посмотреть сообщение
типа так?
Да, как вариант.
1
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195
10.06.2016, 12:40  [ТС]
C++
1
2
3
4
5
6
7
8
9
10
while (!feof(f1)){
    if(fread(&num, sizeof(int), 1, f1)!=1)
    fseek(f1, 1, SEEK_SET);
    a[i] = num;
    i++;}
  while (!feof(f2)){
    if(fread(&num, sizeof(int), 1, f2)!=1)
    fseek(f2, 1, SEEK_SET);
    a[i] = num;
    i++;}
Я понимаю, что это не правильно, но я просто не могу понять как таким образом 2 файла прогнать... (Да, у меня походу уровень не чайника, а самовара)...
P.S Разве fseek(f2, 1, SEEK_SET) не будет постоянно устанавливать указатель положения на 1 элемент файла?
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
10.06.2016, 12:50
Цитата Сообщение от Blekzet Посмотреть сообщение
P.S Разве fseek(f2, 1, SEEK_SET) не будет постоянно устанавливать указатель положения на 1 элемент файла?
Вы правы, моя ошибка нужно SEEK_CUR.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int i = 0;
bool eof_f1, eof_f2;
while ((eof_f1 = !feof(f1)) || (eof_f2 = !feof(f2)))
{
    if(!eof_f1 && fread(&num, sizeof(int), 1, f1) != 1)
    {
        fseek(f1, 1, SEEK_CUR);
        a[i] = num;
        i++;
    }
    if(!eof_f2 && fread(&num, sizeof(int), 1, f2) != 1)
    {
        fseek(f2, 1, SEEK_CUR);
        a[i] = num;
        i++;
    }
}
1
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
10.06.2016, 12:57
Файлы текстовые?
2
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195
10.06.2016, 12:58  [ТС]
Вроде бы да
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
10.06.2016, 12:59
Цитата Сообщение от nmcf Посмотреть сообщение
Файлы текстовые?
Кстати да, fread для бинарных файлов.
1
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195
10.06.2016, 13:02  [ТС]
Госпади, я уже запутался... (Текстовые файлы 100%)
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
10.06.2016, 13:07
Тут пример пословного чтения из потока, имхо, проще уже некуда. Далее полученное слово переводите в число c помощью atoi, и пихаете его в массив.
1
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195
10.06.2016, 13:18  [ТС]
Какой код именно из всего того многообразия? Да и написать мне надо на стыке С и С++... (ну это я и сам разберу)
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
10.06.2016, 13:21
Цитата Сообщение от Blekzet Посмотреть сообщение
Да и написать мне надо на стыке С и С++
Что Вы под этим понимаете? Можно либо на одном либо на другом. Если можно и то и то, то лучше выбрать что проще, нет?

Цитата Сообщение от Blekzet Посмотреть сообщение
Какой код именно из всего того многообразия?
Тот что первым по ссылке идет. Пост пользователя vet
1
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195
10.06.2016, 13:22  [ТС]
Я в смысле, что нужно написать считай на С, но что бы компилировался в С++
0
233 / 99 / 27
Регистрация: 20.03.2014
Сообщений: 304
10.06.2016, 13:24
Лучший ответ Сообщение было отмечено Blekzet как решение

Решение

fscanf тогда вам в помощь)
0
4 / 4 / 0
Регистрация: 21.12.2015
Сообщений: 195
10.06.2016, 13:24  [ТС]
C++
1
2
3
4
while(ifs)
{
          ifs >> s;
}
вот как можно описать это на Си?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.06.2016, 13:24
Помогаю со студенческими работами здесь

Определить, упорядочены ли элементы массива по убыванию
Всем привет!) Помогите с написанием программы . Ввести одномерный статический массив из k чисел и определить, упорядочены ли элементы...

Определить, упорядочены ли по убыванию элементы k-ой строки матрицы
дана целочисленная матрица порядка n на m. Определить ,упорядочены ли по убыванию элементы k-ой строки. #include &quot;stdafx.h&quot; ...

Определить, упорядочены ли по убыванию элементы k-ой строки матрицы
дана целочисленная матрица порядка n на m. Определить ,упорядочены ли по убыванию элементы k-ой строки.#include &quot;stdafx.h&quot; ...

Определить, упорядочены ли по убыванию элементы одномерного массива
Составить процедуру, вычисляющую значение TRUE, если все элементы одномерного массива упорядочены по убыванию их значений, и FALSE в...

Определить, упорядочены ли по убыванию элементы k ой строки матрицы
почему при вводе одного и того же значения дается разный ответ? #include &lt;iostream&gt; #include &lt;time.h&gt; #include ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru