С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Указатель на элементы массива https://www.cyberforum.ru/ cpp-beginners/ thread2179923.html
Изучаю C++, возник такой вопрос. Допустим есть код: int m = { 1,2,3,4 }; int *p2 = std::end(m); int *p1 = std::begin(m); p2 += p1 - p2; cout << p2 << " " << p1; Смущает 4тая строчка. Мы от ук. на 1 элемент отнимаем ук. на позицию после конца. В результате мы выходим за границы массива в отрицательную сторону, как я понимаю. Результатом будет тип ptrdiff_t, который...
Сортировка пузырьком по убыванию и возрастанию C++
Подскажите можно ли в одной программе на С++ разделить сортировку на возрастание и убывание пузырьком?
C++ Найти сумму средних цифр трехзначных чисел https://www.cyberforum.ru/ cpp-beginners/ thread2179905.html
Вводятся два трёхзначных числа A и B (A<B). Вывести сумму средних цифр всех чисел от A до B. Sample Input: 129 132 Sample Output: 11
C++ Поменять числа по возрастанию https://www.cyberforum.ru/ cpp-beginners/ thread2179903.html
Даны четыре числа А, В, С и D. Поменять их значения местами таким образом, чтобы A > B > C >D в других темах коды не работают почему-то. напишите пожалуйста новый
Вывести все возможные сочетания машин и велосипедов с заданной суммой колес C++
У машин и велосипедов вместе N колес. Сколько может быть машин и велосипедов? (вывести все возможные сочетания) Напоминаем, что у велосипеда два колеса, а у машины — четыре. Формат входных данных С клавиатуры вводится целое четное число N (0≤N≤50000). Формат выходных данных Для данного N вывести на экран в два столбца все возможные сочетания количества велосипедов и машин (в...
C++ Записи, с паскаля на с++ Вечер добрый, на учёбе начали юзать плюсы, задание с Паскаля нужно переделать под с++, написал, данные вводятся, но сортировка и поиск не работает, и чепуху выдаёт(на скрине). Поправьте, где не правильно, буду благодарен. :p Условие задания: 1.Описать запись с именем Zodiac, содержащую следующие поля: https://www.cyberforum.ru/ cpp-beginners/ thread2179896.html
C++ Вывести все натуральные числа от a до b включительно через пробел Напишите программу, которая запрашивает два натуральных числа a и b, (a<=b) и выводит все натуральные числа от a до b включительно через пробел. Sample Input 1: 5 11 Sample Output 1: 5 6 7 8 9 10 11 Sample Input 2: 12 16 Sample Output 2: 12 13 14 15 16 https://www.cyberforum.ru/ cpp-beginners/ thread2179892.html C++ Опытным программистам С++
Здравствуйте, я начал изучать С++. Есть определенный план обучения. Например: сначала изучить синтаксис, принцип ООП, контейнеры STL, стандарты С++11/C++14. Вопрос звучит так: что можно еще добавить в список для изучения? Я еще не определился в какой сфере хочу использовать язык, что нужно знать вообще не привязанная к определенной области?
C++ Вывести таблицу стоимости долларов в рублях https://www.cyberforum.ru/ cpp-beginners/ thread2179883.html
Курс доллара в Центробанке равен N рублей. Требуется вывести на экран таблицу стоимости 1, 2, 3, ..., 20 долларов в рублях. Формат входных данных С клавиатуры вводится одно целое число nn (1≤N≤1000) — курс доллара в Центробанке. Формат выходных данных Необходимо вывести таблицу из двух столбцов через пробел (первое число — количество, второе — стоимость). Примеры
C++ Определить минимальное число монеток, которые нужно перевернуть https://www.cyberforum.ru/ cpp-beginners/ thread2179869.html
На столе лежат nn монеток. Некоторые из них лежат вверх решкой, а некоторые – гербом. Определите минимальное число монеток, которые нужно перевернуть, чтобы все монетки были повернуты вверх одной и той же стороной. Формат входных данных В первой строке входного файла содержится натуральное число nn — количество монет (1≤n≤100). В каждой из следующих n строк содержится одно...
Баланс фигурных скобок в файле C++
Вообщем нужно прочитать текст (любая программа, в файле name.txt) из файла и проверить баланс фигурных скобок. Всё проходит нормально, но количество скобок считает не правильно и на этом моменте я застрял, насчитывает по 6900 скобок когда должно быть в районе 10. Текст программы: #include "stdafx.h" #include <iostream> #include <fstream> #include <string> #include <conio.h>
C++ Второй максимум Дан массив из n элементов, необходимо определить максимальный элемент массива и элемент, являющийся максимальным без учёта этого элемента. !!!Данная задача должна решаться без использования массивов.!!! Формат входных данных В первой строке вводится натуральное число nn (2≤n≤100). Во второй через пробел вводятся nn элементов массива. Все числа целые и по модулю не превосходят... https://www.cyberforum.ru/ cpp-beginners/ thread2179852.html
0 / 0 / 0
Регистрация: 19.01.2018
Сообщений: 18
0

Двоичные файлы ввод-вывод, или как покороче - C++ - Ответ 12061860

25.01.2018, 18:09. Показов 625. Ответов 0
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Введу в курс дела...
Уже как неделю я бьюсь над простейшим заданием по двоичным файлам ... Но вчера меня озарило. До меня наконец дошло, что я жуткий тугодум и мои умственные способности оставляют желать лучшего. Тем не менее, я это сделал.

В чем проблема? -->> Код получился аж в 128 строк ( Могут убить меня за такое)! По моему, это много больше, нежели надо.
Вопрос у меня такой: можно ли мой код, представленный ниже, как нибудь сократить(например, записывать и читать из двоичного файла целый массив, а не посимвольно ( я пробовал - у меня не получается)), но сделать это используя по максимуму лишь базовые функции и т.д.(т.е. то, что читабельно для таких чайников, каким я и являюсь) .

Для понимания того, о чем программа, само задание:
1. С помощью текстового редактора создать файл на диске, содержащий в первой строке два натуральных числа N и M – количество строк и столбцов матрицы соответственно, далее следует N строк, состоящих из M целых чисел – элементы матрицы. Числа в файле разделены пробелами.
2. Разработать, отладить, продемонстрировать и защитить преподавателю укрупненную графическую схему алгоритма и программу, которая создает двоичный файл на основе текстового файла, записывая в него сначала два целых числа N и M, а затем элементы матрицы, считанные из текстового файла. В качестве буфера при вводе-выводе использовать одномерный массив размерностью M. Вывести содержимое двоичного файла на монитор. Двумерные массивы не создавать.
3. Задачу разбить на подзадачи, решение которых оформить как функции.
4. Выполнить задание в соответствии с приведенными ниже вариантами. Учесть, что обрабатывать следует данные, хранящиеся в двоичном файле.

Вот сама программа
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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#define _CRT_SECURE_NO_WARNINGS 
#include <iostream>
#include <fstream>
#include <clocale>
using namespace std;
 
int write_in_bin();
void output_matrix_and_find_string(ifstream &fbin, int *buf, int *k_buf, int k);
int find_sum(int *k_buf);
 
int n, m; // инициализация размера матрицы (нужны в несколькиз функциях)
int main()
{
    setlocale(LC_ALL, "Rus");
    if (write_in_bin() == 1) return 1;
    ifstream fbin("bfile.bin", ios::binary); // открытие созданного двоичного файла
    if (!fbin.is_open())
    {
        cout << "Ошибка! Невозможно открыть файл!";
        system("pause");
        return 0;
    }
    int *buf = new int[m]; // инициализация буфера
    int *k_buf = new int[m]; // инициализация буфера для k-той строки
    int k;
    cout << "Введите k: ";
    cin >> k;
    output_matrix_and_find_string(fbin, buf, k_buf, k);
    int result =  find_sum(k_buf);
    if (result == -1)
    {
        cout << "Подсчет невозможен, так как заданная строка не удовлетворяет условиям задания.";
        system("pause");
        return 0;
    }
    else
        cout << "Сумма элементов, расположенный между 1-м и 2-м отрицательными \n элементами " << k << " строки равна: " << result << endl;
    system("pause");
    return 0;
}
 
 
 
int write_in_bin()
{
    ifstream txt("tfile.txt");
    if (!txt.is_open())
    {
        cout << "Ошибка! Невозможно открыть файл!";
        system("pause");
        return 1;
    }
    ofstream bin("bfile.bin", ios::binary);
    txt >> n >> m;
    bin.write((char *)&n, sizeof(int));// запись в бинарный файл размер матрицы
    bin.write((char *)&m, sizeof(int));
    int *buf = new int[m];
    while (txt) // чтение из txt файла и запись матрицы в bin файл
    {
        for (int i = 0; i < m; i++)
        {
            txt >> buf[i];
        }
        for (int i = 0; i < m; i++)
        {
            bin.write((char *)&buf[i], sizeof(int));
        }
    }
    bin.close();
    txt.close();
    return 0;
}
 
void output_matrix_and_find_string(ifstream &fbin, int *buf, int *k_buf, int k) // здесь - вывод матрицы на экран, поиск k-той строки
{                                                                               // и запись её в буфер
    
    for (int i = 0; i < 2; i++) //чтение из bin файла размера матрицы и вывод их на экран
    {
        fbin.read((char *)&buf[0], sizeof(int));
        cout << buf[0] << " ";
    }
    cout << endl;
    int j = 0;
    while (j < n)
    {
        for (int i = 0; i < m; i++)
        {
            fbin.read((char*)&buf[i], sizeof(int));
        }
        for (int i = 0; i < m; i++)
        {
            cout << buf[i] << " ";
        }
        if (j == k - 1) // поиск k-той строки и запись её в буфер
            for(int i = 0; i < n; i++)
                k_buf[i] = buf[i];
        j++;
        cout << endl;
    }
}
int find_sum( int *k_buf)
{
    int neg1=-1, neg2=-1, sum = 0, i =0;
    while (i < n)  // поиск 1-го отрицательного числа
    {
        if (k_buf[i] < 0)
        {
            neg1 = i;
            i++;
            break;
        }
        i++;
    }
    if (i == n) return -1; // при его отсутствии вернуть значение -1
    while (i < n)
    {
        if (k_buf[i] < 0)
        {
            neg2 = i;
            break;
        }
        i++;
    }
    if (neg2 == -1) return -1; // при отсутствии 2-го отрицательного, вернуть -1
    for (int j = neg1 + 1; j < neg2; j++) // подсчет
        sum += k_buf[j];
    return sum;
}
А это пример содержимого файла tfile.txt
5 5
0 1 0 1 0
-1 3 2 -1 4
-1 2 5 9 7
1 2 3 4 -2
1 1 -2 2 -3

Заранее спасибо!!!

p.s. ...или все же нормально, не убьют?

Вернуться к обсуждению:
Двоичные файлы ввод-вывод, или как покороче C++
0
Заказать работу у эксперта
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.01.2018, 18:09
Готовые ответы и решения:

Двоичные файлы, ввод-вывод
Здравствуйте. При компиляции программы вызывается исключение со след. текстом: Вызвано исключение...

Двоичные файлы, ввод-вывод
Здравствуйте. Столкнулся с проблемой ввода-вывода в двоичный файл. Вот само задание: 1. С...

Как правильное заполнять двоичные файлы массивами
Приветствую, форумчане! Столкнулся с новой проблемой при освоении. Как правильно заполнить...

Как можно покороче записать это
if(!name){ $(&quot;#name&quot;).addClass(&quot;error_js&quot;); }else{ ...

0
25.01.2018, 18:09
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.01.2018, 18:09
Помогаю со студенческими работами здесь

Сделать ввод и вывод через файлы
Имеется ряд из N лампочек, которые пронумерованы от 1 до N. Изначально ни одна из лампочек не...

Файлы. ввод и вывод вложенных каталогов...
Сегодня решала такую задачу: дан входной текствоый файл с несколькими строками: bp\bd\catalog...

Файловый ввод-вывод.Текстовые файлы
Добрый день! Создать текстовый файл, содержащий символьные значения, следующего формата 'a' '5'...

Вывод и ввод значений через файлы
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &quot;StdAfx.h&quot; using namespace std; int main() {...

0
Новые блоги и статьи
Как создать свою первую игру в стиле Doom на Unreal Engine
InfoMaster 15.01.2025
Разработка шутера от первого лица в стиле классического Doom представляет собой увлекательное путешествие в мир игрового программирования, где сочетаются творческий подход и технические навыки. . . .
Параллельное программировани­е: основные технологии и принципы
InfoMaster 15.01.2025
Введение в параллельное программирование Параллельное программирование представляет собой фундаментальный подход к разработке программного обеспечения, который позволяет одновременно выполнять. . .
Как написать микросервис на C# с Kafka, MediatR, Redis и GitLab CI/CD
InfoMaster 15.01.2025
В современной разработке программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот подход позволяет разделить сложную систему. . .
Что такое CQRS и как это реализовать на C# с MediatR
InfoMaster 15.01.2025
Концепция CQRS и её роль в современной разработке В современном мире разработки программного обеспечения архитектурные паттерны играют ключевую роль в создании масштабируемых и поддерживаемых. . .
Как настроить CI/CD с Azure DevOps
InfoMaster 15.01.2025
CI/ CD, или непрерывная интеграция и непрерывное развертывание, представляет собой современный подход к разработке программного обеспечения, который позволяет автоматизировать и оптимизировать процесс. . .
Как настроить CI/CD с помощью Jenkins
InfoMaster 15.01.2025
Введение в CI/ CD и Jenkins В современной разработке программного обеспечения непрерывная интеграция (CI) и непрерывная доставка (CD) стали неотъемлемыми элементами процесса создания качественных. . .
Как написать микросервис на Go/Golang с Kafka, REST и GitHub CI/CD
InfoMaster 14.01.2025
Определение микросервиса, преимущества использования Go/ Golang Микросервис – это архитектурный подход к разработке программного обеспечения, при котором приложение состоит из небольших, независимо. . .
Как написать микросервис с нуля на C# с RabbitMQ, CQRS, Swagger и CI/CD
InfoMaster 14.01.2025
В современном мире разработки программного обеспечения микросервисная архитектура стала стандартом де-факто для создания масштабируемых и гибких приложений. Этот архитектурный подход предполагает. . .
Как создать интернет-магазин на PHP и JavaScript
InfoMaster 14.01.2025
В современном мире электронная коммерция стала неотъемлемой частью бизнеса. Создание собственного интернет-магазина открывает широкие возможности для предпринимателей, позволяя достичь большей. . .
Как написать Тетрис на Ассемблере
InfoMaster 14.01.2025
Тетрис – одна из самых узнаваемых и популярных компьютерных игр, созданная в 1984 году советским программистом Алексеем Пажитновым. За прошедшие десятилетия она завоевала симпатии миллионы людей по. . .
Как создать игру "Танчики" на Unity3d и C#
InfoMaster 14.01.2025
Разработка игр – это увлекательный процесс, сочетающий в себе творчество и технические навыки. В этой статье мы рассмотрим создание классической игры "Танчики" с использованием Unity3D и языка. . .
Организую платный онлайн микро-курс по доработке Android-клиента Telegram
_Ivana 14.01.2025
Официальная версия и распространенные форки не полностью устраивают? Сделай свою кастомную версию клиента! 4 занятия по 2 часа (2 недели пн, ср 19:00-21:00 по Москве). Первое вводное занятие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru