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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Мурмурчик
Сообщений: n/a
#1

что нужно поменять? - C++

27.08.2008, 12:47. Просмотров 1135. Ответов 3
Метки нет (Все метки)

подскажите пожалуйста, что нужно поменять, чтобы значение Radiusa не требовалось вводить с клавиатуры, а чтобы это значение бралось из bat файла?
Код
#include <stdio.h>
#include <math.h>
#include <string.h>

// Определить струтуру точки
typedef struct
{
 float x;
 float y;
} Point;

// Конвертироовать строку в точку
void ConvertToFloat(char *Buffer,Point *point)
{
 float res;
 char szBuffer[100];
 int len, i;
 // Скопируем данные во внутренний буфер
 strcpy(szBuffer,Buffer);
 // Определить размер строки
 len = strlen(Buffer);
 // Заменить запятую на точку
 for(i=0;i<len;i++)
 {
  szBuffer[i] = Buffer[i];
  if(szBuffer[i]==',')
  {// Заменить запятую на символ окончания строки
   szBuffer[i] = NULL;
   // Преобразовать начало строки (до запятой) в координату x
   point->x = atof(szBuffer);
   // Преобразовать начало строки (после запятой) в координату y
   point->y = atof(szBuffer+i+1);
  }
 }
}

// Главная функция
int main(int argc, char *argv[])
{// Объявить переменные
 FILE *fileIn, *fileOut;
 float Radius, L, v2;
 Point curPoint, point, prevPoint;
 char szBuffer[100];
 int index;
 v2 = sqrt(2.0f);
 printf("[%lf]\n",v2);
 // Проверим количество аргументов
 // (их должно быть 4 (строка запуска + 3 файла) )
 if(argc==4)
 {// Открыть исходный файл
  fileIn = fopen(argv[1],"rt");
  if(fileIn)
  {// Открыть файл с результатами
   fileOut = fopen(argv[2],"wt+");
   if(fileOut)
   {// Ввод радиуса
    // (вводим, пока радиус не введут)
    do
    {
     printf("Radius [2,1024] = ");
     scanf("%f",&Radius);
    }
    while( Radius<2.0 || Radius>1024 );
    // Читаем число в виде строки из файла 
    if( fscanf(fileIn,"%s",szBuffer)>0 )
    {// Преобразуем строку в точку
     ConvertToFloat(szBuffer,&curPoint);
     // Записать число в результирующий файл
     fprintf(fileOut,"%s\n",szBuffer);
     // Читаем очередное число в виде строки
     while( fscanf(fileIn,"%s",szBuffer)>0 )
     {// Преобразуем строку в вещественное число
      ConvertToFloat(szBuffer,&point);
      // Вычислим расстояние Между точками curPoint и point
      L = sqrt( fabs(curPoint.x - point.x)*fabs(curPoint.x - point.x) + 
                fabs(curPoint.y - point.y)*fabs(curPoint.y - point.y) );
      // Проверим: равно ли расстояние ПРИБЛИЗИТЕЛЬНО радиусу
      if( floor(L)==floor(Radius) )
      {// Если эти велечины ПРИБЛИЗИТЕЛЬНО равны
       // то записать точку в файл
       fprintf(fileOut,"%s\n",szBuffer);
       // и сделать вновь найденную точку исходной
       curPoint.x = point.x;
       curPoint.y = point.y;
      }
     }
    }
    // Закрыть файл
    fclose(fileOut);
   }
   // Закрыть файл
   fclose(fileIn);
  }
  /////////////////////////////////////////////////////////
  // Проверка на равность 1 или корень из 2
  /////////////////////////////////////////////////////////
  // Открыть исходный файл
  fileIn = fopen(argv[1],"rt");
  if(fileIn)
  {// Файл откроем только при записи первой строки
   fileOut = NULL;
   // По умолчанию индекс строки = 1
   index = 1;
   // Читаем число в виде строки из файла 
   if( fscanf(fileIn,"%s",szBuffer)>0 )
   {// Преобразуем строку в точку
    ConvertToFloat(szBuffer,&prevPoint);
    // Читаем очередную точку
    while( fscanf(fileIn,"%s",szBuffer)>0 )
    {// Преобразуем строку в вещественное число
     ConvertToFloat(szBuffer,&point);
     // Вычислим расстояние Между точками prevPoint и point
     L = sqrt( fabs(prevPoint.x - point.x)*fabs(prevPoint.x - point.x) + 
	       fabs(prevPoint.y - point.y)*fabs(prevPoint.y - point.y) );
     // Если расстояние НЕ равно 1 или корню из 2
     if( L!=1.0f && L!=v2 )
     {// то если файл ещё не открыт
      if(fileOut==NULL)
      {// то открыть его
       fileOut = fopen(argv[3],"wt+");
      }
      // Сохраним в файл строку для проверки
      fprintf(fileOut,"check %i, %i\n",index,index+1);     
     }
     // Запомнить предыдущую точку
     prevPoint.x = point.x;
     prevPoint.y = point.y;
     // Увеличить индекс строки
     index++;
    }
   }
   // Закрыть файл, если он был открыт
   if(fileOut)
   {// Закрыть файл
    fclose(fileOut);
   }
   // Закрыть файл
   fclose(fileIn);
  }
 }
 else 
 {// Вывести строку подсказку
  printf("\nANALIZ_C.EXE <fileIn.cf> <fileOut.dat> <fileCheck.dat>\n");
 }
 return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.08.2008, 12:47     что нужно поменять?
Посмотрите здесь:

C++ дан массив целых чисел m и n элементов. Нужно поменять местами m и n, в том же порядке
Нужно поменять местами C++
Нужно в массиве в слове "Pascal" поменять букву c на k C++
C++ Что нужно подключить?
Подскажите пожалуйста,что нужно сделать,что бы отображался русский язык?? C++
C++ парни нужно кое-что добавить (нужно что бы эта программа вычисляла среднее арифметическое чисел)
В бинарном файле поменять местами элементы, что стоят на парных местах с элементами, что стоят на непарных местах C++
C++ Нужно сделать что бы давало рандомно числа и нужно написать ответ
C++ Примеры из книги не для установленного компилятора. Что поменять?
Дано пятизначное натурально число. Если последняя цифра больше первой то их нужно поменять местами C++
Написал программу по смене слов в строке, но нужно что бы можно было вводить слова с клавиатуры.Что нужно ? C++
C++ В магазине работает 5 человек, нужно составить график их работы, нужно что бы каждый день работало по 3 чел

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
27.08.2008, 13:14     что нужно поменять? #2
добаить передачу параметров через командную строку
Nick
0 / 0 / 0
Регистрация: 27.08.2008
Сообщений: 11
29.08.2008, 11:04     что нужно поменять? #3
Почему именно из bat? из ini-файла можно?
Spo1ler
292 / 52 / 3
Регистрация: 22.05.2008
Сообщений: 788
29.08.2008, 21:09     что нужно поменять? #4
тут кже другое, есил бат файл, то обычно передают через параметр приложения, тоесть например: someapp.exe file1.txt. а через ини чтоб получить, его надо парсить
Yandex
Объявления
29.08.2008, 21:09     что нужно поменять?
Ответ Создать тему
Опции темы

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