Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Функция pow. Преобразование типов http://www.cyberforum.ru/cpp-beginners/thread14668.html
Есть два вопроса: 1) в докуметации нашёл описание, что pow(x,y) возводит x в степень y и притом входные параметры должны быть или double или float. Как поступить если x && y = int? а также...
В упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность C++
Ребята, есть задача, условие такое: в упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность. Вот с этим алгоритмом даже если число подходит в первое условие, то оно...
C++ Сортировка поля структуры по возрастанию
Здравствуйте! Есть вот такой вопрос: Есть программа печати расписания, вот ее код #include <iostream.h> #include <conio.h> #include <string.h> #include <stdlib.h> const int N=80; struct...
C++ Помогите плз найти ошибку. Нужно написать прогу с 2 классами и наследованием. Программа загружает файл, и создает перечень (остальные функции пока убрал).Ошибка-не создает перечень. Когда все в одном классе прога работает... http://www.cyberforum.ru/cpp-beginners/thread14655.html
C++ HELP!!! движение геометрических фигур http://www.cyberforum.ru/cpp-beginners/thread14654.html
Нужна помощь в написании программы движения круга на экране хотя бы чтоб двигался туда сюда по одной линии, использование методов "дров" и "мув" так вроде называются, плиз, очень нужна помощь, хотя...
Дано натуральное число n, выяснить имеются ли среди чисел n, n+1,...,2n близнецы C++
1.Дано натуральное число n, выяснить имеются ли среди чисел n, n+1,...,2n близнецы (парные простые числа), т.е разность между которыми равна двум.Определить подпрограмму позволяющию распознавать...
C++ Факториал больших чисел.
1.В задаче требуется найти факториал большого числа например 500 и результат с точностью до единицы вывести на экран. Знаю только что результат должен выводится как массив.Но как это сделать не...
C++ Найти сумму 12 членов ряда Помогите пожалуйста, буду очень благодарна Для решения использовать рекуррентную формулу. Найти сумму ряда с точностью 10 в -4 степени. е факториал в степени н делить на н в сепени корень из е http://www.cyberforum.ru/cpp-beginners/thread14638.html
C++ Вопрос по if, else? http://www.cyberforum.ru/cpp-beginners/thread14636.html
Как сделать так чтобы программа работала по таком принципу: 1. Проверяется первое условие если оно верно - выводится оператор за ним. 2. Проверяется второе условие если оно верно - выводится...
C++ Задача нахождения выхода из лабиринта Дан файл с нарисованным лабиринтом в нем, состоящий из 0 и 1. 0 - проход, 1 - стенка. На вход main функции подать файл и начальные координаты старта. Найти выход из матрицы прочертив "X" по маршруту... http://www.cyberforum.ru/cpp-beginners/thread14634.html
XuTPbIu_MuHTAu
Эксперт С++
2237 / 752 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
26.10.2008, 13:42 0

Помогите разобраться в готовом листинге...

26.10.2008, 13:42. Просмотров 821. Ответов 4
Метки (Все метки)

Ответ

Достаточно просто. На вход получает строку,куда потом запишет имя файла, и целое число.
Код
void get_filename(char *str, int number)
{
  char tmp[LENGTH];// 
  strcpy(str, "part.");// сначала записывает по переданному адресу "part."
  itoa(number,tmp,10);// в строку tmp записывает переданное число,в символьном виде(если передать 34 - в tmp будет "34" )
  strcat(str, tmp);//присоединяет к исходной строке tmp. т.е будет "part.34",если передать 34.
}//собственно все
Идея автора проги такая : он считывает построчно из файла,увеличивая счетчик прочитанных строк. Каждый раз,когда кол-во строк переваливает за очередную тысячу,увеличивается на один другая переменная (count). Имя файла,в который да данный момент ведется запись получается с помощью этой функции. Т.е,когда count увеличится,имя файла изменится. Таким образом программа разбивает файл.

P.S на мой взгляд,код не очень оптимален.

Добавлено через 24 минуты 58 секунд
Код
#include<iostream>
#include<stdio>
 const int LENGTH = 80;
 void get_filename(char *str,int number)
 int main()
 {
   FILE *fp,*pt; // ft - исходный файл. pt - файл для записи
   const char *filename = "linux.words";// имя исходного файла
   const int NUMBER_LINES = 1000;//кол-во строк в одном файле
   int count = 0;//кол-во строк,прочитанных из исходного файла
   int current_number = 0;//номер файла,в который сейчас ведется запись

   char str[LENGTH];// 
   char name_old[LENGTH] = "";
   char name[LENGTH] = "";

   fp = fopen(filename, "r");//открываем исходный файл
   get_filename(name, 0);// устанавливаем имя файла для записи(part.0)
   pt = fopen(name, "w");//открываем файл для записи

   while(!feof(fp))//пока не кончился входной файл
   {
     current_number = count/NUMBER_LINES;// считаем номер текущего файла для записи
     get_filename(name, current_number);//по номеру генерируем имя
     if(strcmp(name_old,name))//если это имя отличается от предыдущего
   {
   fclose(pt);//закрываем старый файл
   cout << name << "\n";//печатаем имя нового
   pt = fopen(name, "w");//открываем новый
   }

   fgets(str, LENGTH, fp);// читаем очередную строку из входного файла
   fputs(str, pt);//записываем прочитанную строку в открытый на данный момент файл 
   strcpy(name_old, name);// копируем новое имя файла в переменную,которая содержит старое имя файла
   count++;//увеличиваем счетчик прочитанных строк
  }

   fclose(fp);//заккрываем входной файл
   return 0;//все.
  }

void get_filename(char *str, int number)
{
  char tmp[LENGTH];// 
  strcpy(str, "part.");// сначала записывает по переданному адресу "part."
  itoa(number,tmp,10);// в строку tmp записывает переданное число,в символьном виде(если передать 34 - в tmp будет "34" )
  strcat(str, tmp);//присоединяет к исходной строке tmp. т.е будет "part.34",если передать 34.
}
Собственно,видно,чем код плох. Он на каждом шаге генерирует новое имя файла,сравнивает со старым,копирует. И только каждые 1000 раз копирование и генерация нового имени необходима.

Вернуться к обсуждению:
Помогите разобраться в готовом листинге...
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2008, 13:42
Готовые ответы и решения:

Не могу разобраться в листинге из Шилдта(3 издание)
Прога меняет 2 байта из объединения местами. // Use a union to exchange the bytes within a short...

Помогите найти ошибку в приведенном листинге
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;string&gt; #include &lt;conio.h&gt;...

If else помогите разобраться
Доброго времени суток всем. Не так давно начали программировать в C++ MS Visual Studio 2010? и...

Помогите разобраться
У меня есть координаты North,West,East,South. Мне нужно отобразить их на осях ОХ и ОУ. Допустим я...

Помогите разобраться в Наследование
#include&lt;iostream&gt; using namespace std; class Counter1 { protected: int count; public:...

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