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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Функция pow. Преобразование типов http://www.cyberforum.ru/cpp-beginners/thread14668.html
Есть два вопроса: 1) в докуметации нашёл описание, что pow(x,y) возводит x в степень y и притом входные параметры должны быть или double или float. Как поступить если x && y = int? а также интересует может ли в этой ф-ции y принимать дробные значения и x отрицательные? 2) есть код float pogresh(float kStd, float sumK) { int n = 3; float pogr =(float)( kStd * pow(sumK,0.5)) /...
C++ В упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность Ребята, есть задача, условие такое: в упорядоченный массив включить новый элемент так, чтобы не нарушилась упорядоченность. Вот с этим алгоритмом даже если число подходит в первое условие, то оно игнорируется и выполняется условие e>a, если же это условие убрать то работает первое условие, но не выполняется случай, когда число больше последнего элемента. Пробовал переписывать первое условие,... http://www.cyberforum.ru/cpp-beginners/thread14663.html
C++ Сортировка поля структуры по возрастанию
Здравствуйте! Есть вот такой вопрос: Есть программа печати расписания, вот ее код #include <iostream.h> #include <conio.h> #include <string.h> #include <stdlib.h> const int N=80; struct Raspisanie {
Помогите плз найти ошибку. C++
Нужно написать прогу с 2 классами и наследованием. Программа загружает файл, и создает перечень (остальные функции пока убрал).Ошибка-не создает перечень. Когда все в одном классе прога работает нормально. #include <iostream.h> #include <iomanip.h> #include <fstream.h> #include <stdlib.h> #include <string.h> #include <conio.h> int nn=0; class spisok
C++ HELP!!! движение геометрических фигур http://www.cyberforum.ru/cpp-beginners/thread14654.html
Нужна помощь в написании программы движения круга на экране хотя бы чтоб двигался туда сюда по одной линии, использование методов "дров" и "мув" так вроде называются, плиз, очень нужна помощь, хотя бы как вообще нарисовать этот круг?
C++ Дано натуральное число n, выяснить имеются ли среди чисел n, n+1,...,2n близнецы 1.Дано натуральное число n, выяснить имеются ли среди чисел n, n+1,...,2n близнецы (парные простые числа), т.е разность между которыми равна двум.Определить подпрограмму позволяющию распознавать простые числа. Вот что у меня получилось но работает неправильно хотя по логике все вроде верно: #include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> подробнее

Показать сообщение отдельно
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2219 / 734 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
26.10.2008, 13:42     Помогите разобраться в готовом листинге...
Достаточно просто. На вход получает строку,куда потом запишет имя файла, и целое число.
Код
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 раз копирование и генерация нового имени необходима.
 
Текущее время: 01:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru