Комплексные числа (Чтение комплексных чисел из файла)

Модератор: Модераторы разделов

impostor
Сообщения: 103
ОС: Ubuntu 9.04

Комплексные числа

Сообщение impostor »

Как реализовать чтение комплексных чисел из файла с помощью функции fscanf? Ну, или может какой-нибудь другой.
В файле числа записаны примерно так 5.35+i7.657
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Комплексные числа

Сообщение кодировщик »

не понял для чего они потом будут нужны, или просто нужно считать файл из чисел?!
Спасибо сказали:
impostor
Сообщения: 103
ОС: Ubuntu 9.04

Re: Комплексные числа

Сообщение impostor »

В файле записаны отсчеты сигнала, в виде комплексных чисел. И их надо будет обрабатывать в программе.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Комплексные числа

Сообщение RasenHerz »

Код: Выделить всё

char sign;
float x, y;
fscanf(fp, "%f%c%*c%f", &x, &sign, &y);
if (sign == '-')
    y *= -1.0f;

как то так, на ошибки не проверял - код писал сразу сюда.
Спасибо сказали:
Аватара пользователя
кодировщик
Сообщения: 974
Статус: зарёган в пятницу 13
ОС: Linux

Re: Комплексные числа

Сообщение кодировщик »

RasenHerz писал(а):
01.05.2009 17:18

Код: Выделить всё

char sign;
float x, y;
fscanf(fp, "%f%c%*c%f", &x, &sign, &y);
if (sign == '-')
    y *= -1.0f;

как то так, на ошибки не проверял - код писал сразу сюда.

Конечно думаю видя структуру файла, легче было бы всё понять.
Думаю перед fscanf нужно ещё добавить что-то типа
while(!feof(fp))
{
fread......
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Комплексные числа

Сообщение RasenHerz »

кодировщик писал(а):
01.05.2009 17:29
Конечно думаю видя структуру файла, легче было бы всё понять.
Думаю перед fscanf нужно ещё добавить что-то типа
while(!feof(fp))
{
fread......

fread не нужен, делаем просто так:

Код: Выделить всё

int main(int argc, char *argv[]){
  FILE *fp = fopen("file.txt", "r");
  char sign;
  float x, y;
  int r = 0;
  if (!fp)
    perror("fopen");
  do{
    r = fscanf(fp, "%f%c%*c%f\n", &x, &sign, &y);
    if (sign == '-')
      y *= -1.0f;
    if (r == 3)
      printf("x=%f; y=%f\n", x, y);
  } while (!feof(fp) && r == 3);
}

для файлов вида:

Код: Выделить всё

4.0+j7.657
5.35+j1.0
1-j12

отрабатывает на ура:

Код: Выделить всё

negativ@negativ-zet:~$ ./a.out
x=4.000000; y=7.657000
x=5.350000; y=1.000000
x=1.000000; y=-12.000000
negativ@negativ-zet:~$
Спасибо сказали:
impostor
Сообщения: 103
ОС: Ubuntu 9.04

Re: Комплексные числа

Сообщение impostor »

Спасибо огромное. А вот в последнем коде переменная r что означает?
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Комплексные числа

Сообщение RasenHerz »

impostor писал(а):
01.05.2009 21:35
Спасибо огромное. А вот в последнем коде переменная r что означает?

сколько переменных считано из строки.
Спасибо сказали: