Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 13 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Делая работу по оптимизации понадобилось найти соответствующее место в файле а после него записать цифровой массив. Файл приблизительно такой:

Table of Contents

start

95 45 11 22
41 24 11 74
99 100 12 16
15 144 13 47

End

Нужны массивы второго и третего столбца. Если кто сталкивался в начале с подобной проблеммой - пожалуйста помогите!

Заранее спасибо



Партнер
 

Member
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
На чём пишешь-то?


 

На Turbo C++ (Понимаю что не старье, но что есть..)


 

Member
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
/* пропускаем Table of Contents и start, считая, что файл уже открыт и его дескриптор - pFile */
char buffer[4096];
do {
if (fscanf (pFile, "%s", buffer) != EOF)
{ // Если достигнут конец файла, то слова start нет => выходим
return -1;
}
} while ( strcpy (buffer, "start") != 0);

/* Считаем, что в массиве N строк и M столбцов. Нужно выделить K-ый столбец. Считаем, что считываем в массив из double */
double result[N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < M; j++)
{
if (j == (K - 1))
if (fscanf (pFile, "%lf", result[i]) != 1)
{ // Если не было считано число, то ошибка
return -1;
}
}
}
return 0;


На самом деле, программа написана на C++, но переделать на C несложно - просто перенеси все объявления переменных в начало функции.

Добавлено спустя 2 минуты, 6 секунд:
Стоп! Размеры матрицы известны?

Добавлено спустя 3 минуты, 10 секунд:
Так-с, я что-то перестал понимать задание. Надо записать в файл?


 

Пока только создать массив данных из второго и третего столбцов. Сейчас попытаюсь применить...


 

Member
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
Блин, в третьей строчке должно быть == EOF.


 

http://forums.overclockers.ru/viewtopic ... 69#1658269

Добавлено спустя 1 минуту, 21 секунду:
пардон послал чушь...

Добавлено спустя 1 минуту, 22 секунды:
что означает "start", в копировании строки strcpy(buffer, "start") ?

Добавлено спустя 2 минуты, 21 секунду:
А понял... это проверка содержимого Buffer///


 

Member
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
Чёрт, всё время путаю, strcmp (buffer, "start") != 0


 

Попробовал перерулить это на си, получилось вот что:
#include <stdio.h>
#include <string.h>

int main(void)
{
int i,j;
char c;
char buffer[4096];
FILE *ifp;
double result[4];
clrscr();

ifp=fopen("proba.txt", "r");
do{
if(fscanf(ifp, "%s", buffer)==EOF)
{
return -1;
}

} while(strcpy(buffer, "start")!=0);

for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (j == (2 - 1))
if (fscanf (ifp, "%lf", result[i]) != 1)
{
return -1;
}
}
}
printf("%lf\n%lf\n%lf\n%lf\n", result[0], result[1], result[2], result[3]);

return 0;
}

Но массив в конце он не печатает


 

Member
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
Исправь strcpy на strcmp!

Добавлено спустя 5 минут, 27 секунд:
Цитата:
if (j == (2 - 1))
if (fscanf (ifp, "%lf", result[i]) != 1)
{
return -1;
}

Добавь вначале
double tmp;

Исправь фрагмент программы на
if (fscanf (ifp, "%lf", &tmp) != 1)
return -1;
if (j == (2 - 1))
result[i] = tmp;

Всё.


 

Все -Работет!!!!!!!!!!
ОГРОМНОЕ СПАСИБО!
Слушай, может подскажешь мне хоть пару источников в которых можно найти готовые алгоритмы (примеры функций)?


 

Member
Статус: Не в сети
Регистрация: 06.09.2005
Откуда: Москва
Дональд Кнут. Искусство программирования.
Есть и другие.
Хотя, если честно, не мешает изучить стандартную библиотеку получше, как и C/C++ в целом.


 

Я изучаю C++ всего месяц с хвостиком, так что мне простительно некоторая безалаберность в данном вопросе :-)


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 13 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan