Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> задача на работу с файлами 
:(
    Опции темы
1122
Дата 6.4.2008, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Есть следующая задача:
В текстовом файле хранится вещественная матрица. Записать ее в другой файл таким образом, чтобы в первом столбце находились минимальные элементы строк, а в последнем – максимальные.
Подскажите пожалуйста алгоритм решения и функции, которыми пользоваться. Если можно, то пример кода. Заранее спасибо.
PM MAIL   Вверх
archimed7592
Дата 6.4.2008, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Алгоритм:
1. Считываешь матрицу из файла.
2. Сортируешь каждую строку матрицы по возрастанию.
3. Записываешь получившуюся матрицу в др. файл.

Добавлено через 1 минуту и 34 секунды
Цитата(1122 @  6.4.2008,  00:37 Найти цитируемый пост)
Если можно, то пример кода

Нельзя! Что значит пример кода? Пример кода может быть "как унаследовать один класс от другого", а для конкретных задач не пример кода, а решение. Хочешь научиться - попытайся написать его сам. Не хочешь - go в Центр Помощи.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
1122
Дата 6.4.2008, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



да, спасибо...
А вот такая задача:
В текстовом файле хранится историческая информация: дата в формате dd.mm.yyyy (число.месяц.год) и краткое сообщение о событии. Записать в другой файл эти исторические события в хронологическом порядке.
Подскажие пожалуйста алгоритм...
PM MAIL   Вверх
bsa
Дата 6.4.2008, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



пишешь структуру: 
Код
struct Event {
   unsigned year, month, day;
   char text[256];
};
Затем пишешь функцию сравнения:
Код
int compare(const void *e1, const void *e2){
...
}
Которой передаются два указателя на структуры Event. Она возвращает 0, если содержимое равно, -1 если дата у e1 меньше, чем у e2 и +1, если у e2 больше, чем у e1.
Затем считываешь весь файл в массив таких структур.  И используешь qsort для сортировки этого массива, затем записываешь его обратно в файл.
PM   Вверх
1122
Дата 6.4.2008, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Цитата(archimed7592 @  6.4.2008,  01:10 Найти цитируемый пост)
Алгоритм:
1. Считываешь матрицу из файла.
2. Сортируешь каждую строку матрицы по возрастанию.
3. Записываешь получившуюся матрицу в др. файл.

Вот у меня вопрос, а как считать матрицу из файла. У меня почему-то абра-кадабра получается после того, как я считываю циферки из файла с помощью fscanf'а в массив типа инт?
PM MAIL   Вверх
bsa
Дата 6.4.2008, 15:33 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



1122, ты бы хоть показал, как ты это делаешь.
PM   Вверх
1122
Дата 6.4.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Как преобразовать считанный  из файла сhar-массив в int-массив?
PM MAIL   Вверх
archimed7592
Дата 6.4.2008, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



1122, а ты его читай не char-массивом, а числами...
Код

int x;
fscanf(fp, "%d", &x); // в x прочиталось число из файла



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
1122
Дата 6.4.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Спасибо..

Блин..
Почему-то это не работает, не подскажите где ошибка?

Код

    i=0;
    while(!feof(fp))
    {
        fscanf(fp, "%d", &arr[i]); 
        printf("%d", arr[i]);
        i++;
    }


Просто не выводит ничего на экран.
PM MAIL   Вверх
archimed7592
Дата 6.4.2008, 16:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Код

    if (!fp)
        printf("oops :)\n");
    i=0;
    while(!feof(fp))
    {
        fscanf(fp, "%d", &arr[i]); 
        printf("%d", arr[i]);
        i++;
    }

А так чё выведет? smile


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
1122
Дата 6.4.2008, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Ничего smile
PM MAIL   Вверх
archimed7592
Дата 6.4.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



А покажи код полностью.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
1122
Дата 6.4.2008, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Код

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100


int main()
{
    int ch, n, i, f, a, q, j, b;
    char mass[N], mass2[N];
    int arr[N];
    FILE *fp;

    if((fp=fopen("text.txt", "r+t")) == NULL)
    {
        printf("Oshibka");
        exit(1);
    }
/////////////////////////////////////////////////////
    for(i = 0; i < N; i++)
    {
        if(ch == EOF)
        {
            mass[i] = '\0';
            break;
        }
        ch = getc(fp);
        mass[i] = ch;

    }
//////////////////////////////////////////////////////
    if (!fp)
        printf("oops :)\n");
    i=0;
    while(!feof(fp))
    {
        fscanf(fp, "%d", &arr[i]); 
        printf("%d", arr[i]);
        i++;
    }



    //mass2[i] = '\0';
    printf("%s\n", mass);
    //printf("%s", mass2);

    fclose(fp);
    getch();
    return 0;
}

PM MAIL   Вверх
1122
Дата 6.4.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 109
Регистрация: 24.10.2007

Репутация: -1
Всего: нет



Или вот... аналогичная задача, нужно считать из типизированного файла числа (кстати, что значит типизированный? это не текстовой? если да, то какой?).
Пользуюсь этим кодом:
Код

#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define N 100


int main()
{
     int ch, i = 0;
     int arr1[N], arr2[N];
     FILE *fp;

     if ((fp=fopen("text.txt", "r+t")) == NULL)
     {
          printf("Oshibka\n");
          getch();
          exit(1);
     }
     while(ch != EOF)
     {
          ch = getc(fp);
          arr1[i] = ch;
          i++;     
     }

    for(i = 0; i <= N; i++)
    {
        printf("%d ", arr1[i]);
    }

    getch();
    return 0;
}


На экран выводятся совершенно левые числа.. абра-кадабра :(
PM MAIL   Вверх
archimed7592
Дата 6.4.2008, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 6
Всего: 93



Цитата(1122 @  6.4.2008,  17:14 Найти цитируемый пост)
    for(i = 0; i < N; i++)
    {
        if(ch == EOF)
        {
            mass[i] = '\0';
            break;
        }
        ch = getc(fp);
        mass[i] = ch;
    }

Закомментируй этот кусок - ты же сначала считываешь данные из файла здесь(по всей видимости ты считываешь файл до конца), после чего естественно, что feof вернёт true...

Добавлено через 4 минуты и 57 секунд
Цитата(1122 @  6.4.2008,  18:02 Найти цитируемый пост)
кстати, что значит типизированный? это не текстовой? если да, то какой?

Не знаю... спроси у преподавателя, что он под этим понимает.

Цитата(1122 @  6.4.2008,  18:02 Найти цитируемый пост)
На экран выводятся совершенно левые числа.. абра-кадабра :( 

Дай ка угадаю: для файла, заполненного пробелами на экран выведется много чисел 32 smile.
Тебе нужно разобраться в чём разница между символом текста, текстом и собственно числом.
Текст "123" состоит из символов '1','2','3'. getc возвращает первый символ('1') после чего ты преобразовываешь его в число. На самом деле никакого преобразования нет, ибо символ - это и есть число, представляющее код данного символа. Для пробела(' ') это 32, к примеру(в известных мне кодировках).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.