Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
Мурмурчик
1

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

27.08.2008, 12:47. Просмотров 1275. Ответов 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;
}
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2008, 12:47
Ответы с готовыми решениями:

Что тут нужно поменять что бы код работал?
Дано предложения: &quot;ЛЕНЬ - МАТЬ ВСЕХ ПОРОКОВ&quot; В заданном предложении вырезать каждую третью букву...

Что нужно поменять чтобы операция стала перегруженной?
При помощи перегруженной операции и констант необходимо проверить, является ли строка...

Заменить использование статического массива в программе на динамический (что нужно поменять?)
#include &lt;iostream&gt; // cin , cout #include &lt;cstdlib&gt; //для system(&quot;pause&quot;) #include...

парни нужно кое-что добавить (нужно что бы эта программа вычисляла среднее арифметическое чисел)
нужно что бы эта программа вычисляла среднее арифметическое чисел, общую сумму, максимальное и...

3
295 / 55 / 5
Регистрация: 22.05.2008
Сообщений: 788
27.08.2008, 13:14 2
добаить передачу параметров через командную строку
0
0 / 0 / 0
Регистрация: 27.08.2008
Сообщений: 11
29.08.2008, 11:04 3
Почему именно из bat? из ini-файла можно?
0
295 / 55 / 5
Регистрация: 22.05.2008
Сообщений: 788
29.08.2008, 21:09 4
тут кже другое, есил бат файл, то обычно передают через параметр приложения, тоесть например: someapp.exe file1.txt. а через ини чтоб получить, его надо парсить
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.08.2008, 21:09

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Написал программу по смене слов в строке, но нужно что бы можно было вводить слова с клавиатуры.Что нужно ?
// ConsoleApplication7.cpp: определяет точку входа для консольного приложения. // #include...

Что нужно поменять что бы программа меняла местами слова первое с последним второе с предпоследним и т.д?
program Project1; const D = ; var S, Sw : String; i, Len, Cnt, CntMid : Integer; ...

Что нужно поменять?
Сделал приложение, вот ссылка...

Проверте сборку, что нужно поменять?
Проветре мою сборку , можно чтото поправить. ПРОЦЕССОР:...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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