Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Danteeee
0 / 0 / 1
Регистрация: 17.10.2014
Сообщений: 60
1

Считывание и запись матрицы в файл

02.04.2015, 15:14. Просмотров 624. Ответов 1
Метки нет (Все метки)

Нужно написать 2 функции:
1) для считывание одномерной марицы из файла для дальшей работы с ним
2) для сохранения матрицы в файл

пример содержимого файла:
Код
24 5 54 95 15 35 65
Добавлено через 19 часов 24 минуты
вот в чём тут ошибка?
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FILE *fp;
    fp=fopen("in.txt", "r");
    if (fp != NULL)
    {
 
        fscanf(fp, "%d", &p);//считываю размер массива
        for (i = 0; i < p; ++i){
 
            fscanf(fp, "%f", &arr[i]);
        }
        fclose(fp);
    }
    else{
        printf("невозможно открыть файл");
    }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.04.2015, 15:14
Ответы с готовыми решениями:

Считывание с файла и запись в файл
как считать и записать данные с файла , с расширением txt?

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

Запись\считывание матрицы в бинарном файле
Доброго времени суток. Необходимо что бы в бинарный файл было записанно- размер матрицы(кол-во...

Задачка на считывание и запись чисел в файл
Доброго времени! Помогите с задачкой. Задачка на поиск данных в файле: &quot;Осуществить: 1 –...

Построчное считывание, обработка строк, и запись в файл
Всем доброго времени дня! Подскажите пожалуйста, как следующую программу. Есть файл, в...

1
Danteeee
0 / 0 / 1
Регистрация: 17.10.2014
Сообщений: 60
06.04.2015, 16:29  [ТС] 2
так как мне сделать чтобы то что считывалось в s4ituvanie() можно было отсортировать в Vibor() и piramid()
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;
 
int p; //количество элементов
int i;
int j;
float temp;
float arr[100];
int vvod(){
 
    printf("Сколько элементов будет в массиве? ");
    //cout << "Введите размер массива" << endl;
 
    scanf_s("%d", &p);
    //cin >> p;
 
    arr[100] = arr[p];
    //ввод элементов
    for (i = 0; i < p; i++){
        printf("Введите  %d  элемент: ", i);
        //cout << "Введите " << i << " элемент: \n";
        scanf_s("%f", arr + i);
    }
    return 1;
}
template<class T> void SiftDown(T* const heap, int i, int const n)
{   //Просеивает элемент номер i вниз в пирамиде heap.
    //n -- размер пирамиды
 
    //Идея в том, что вычисляется максимальный элемент из трёх:
    //  1) текущий элемент
    //  2) левый потомок
    //  3) правый потомок
    //Если индекс текущего элемента не равен индексу максималь-
    //  ного, то меняю их местами, и перехожу к максимальному
 
    //Индекс максимального элемента в текущей тройке элементов:
    int nMax(i);
    //Значение текущего элемента (не меняется):
    T const value(heap[i]);
 
    while (true)
    { //Рассматривается элемент i и его потомки i*2+1 и i*2+2
        //В начале каждой итерации nMax == i и value == heap[i]
 
        int childN(i * 2 + 1); //Индекс левого потомка
        //Если есть левый потомок и он больше текущего элемента,
        if ((childN < n) && (heap[childN] > value))
            nMax = childN; //  то он считается максимальным
 
        ++childN; //Индекс правого потомка
        //Если есть правый потомок и он больше максимального,
        if ((childN < n) && (heap[childN] > heap[nMax]))
            nMax = childN; //  то он считается максимальным
 
        //Если текущий элемент является максимальным из трёх
        //  (т.е. если он больше своих детей), то конец:
        if (nMax == i) break;
 
        //Меняю местами текущий элемент с максимальным:
        heap[i] = heap[nMax]; heap[nMax] = value;
        //  при этом значение value будет в ячейке nMax,
        //  поэтому в начале следующей итерации значение value
        //  правильно, т.к. мы переходим именно к этой ячейке
 
        //Переходим к изменившемуся потомку
        i = nMax;
 
    };
}
template<class T> void HeapSort(T* const heap, int n)
{   //Пирамидальная сортировка массива heap.
    //  n -- размер массива
 
    //Этап 1: построение пирамиды из массива
    for (int i(n / 2 - 1); i >= 0; --i) SiftDown(heap, i, n);
 
    //Этап 2: сортировка с помощью пирамиды.
    //  Здесь под «n» понимается размер пирамиды
    while (n > 1) //Пока в пирамиде больше одного элемента
    {
        --n; //Отделяю последний элемент
 
        //Меняю местами корневой элемент и отделённый:
        T const firstElem(heap[0]);
        heap[0] = heap[n];
        heap[n] = firstElem;
 
        //Просеиваю новый корневой элемент:
        SiftDown(heap, 0, n);
    }
}
void piramid() {
 
    HeapSort(arr, p);
    printf("[");
    //cout << "[ ";
    for (int i = 0; i < p; ++i)
        printf(" %g ", arr[i]);
    //cout << arr[i] << " ";
    printf("]");
    //cout << "]" << endl;
 
    system("pause");
 
}
 
int Vibor(){
    for (i = 0; i < p; i++)
 
    {
        for (j = p - 1; j >= i; j--)
            if (arr[j - 1] > arr[j])
            {
                temp = arr[j - 1];
                arr[j - 1] = arr[j];
                arr[j] = temp;
            }
    }
    printf("[");
    for (i = 0; i < p; i++)
    {
        printf(" %g ", arr[i]);
 
        //cout << a[i] << " ";
    }
    printf("]");
    printf("\n");
    system("pause");
    return 1;
}
 
void s4ituvanie(){
    FILE *fp;
    fp=fopen("in.txt", "r");
    if (fp != NULL)
    {
 
        fscanf(fp, "%d", p);
        for (i = 0; i < p; ++i){
 
            fscanf(fp, "%f", arr[i]);
        }
        fclose(fp);
    }
    else{
        printf("невозможно открыть файл");
    }
 
}
 
int _tmain(int argc, _TCHAR* argv[])
{
menu:
    setlocale(LC_ALL, "Russian");
    system("cls");
    printf("-----Сделайте выбор-----\a\n");
    printf("1. Ввод массива с клавиатуры\n");
    printf("2. Считывание массива с файла(input.txt)\n");
    printf("3. Сортировка массива пирамидальным методом\n");
    printf("4. Сортировка массива методом выбора\n");
    printf("5. Записать результат в файл (output.txt)\n");
    printf("6. Выход из программы\n");
    printf("Ваш выбор: ");
    int input;
    scanf_s("%d", &input);
    switch (input) {
    case 1:
        system("cls");
        printf("Ввод массива с клавиатуры\n\a");
        vvod();
        goto menu;
        break;
    case 2:
    {
        system("cls");
        printf("2. Считывание массива с файла(input.txt)\n\a");
        s4ituvanie();
        goto menu;
    }
    case 3:
    {system("cls");
    printf("3. Сортировка массива пирамидальным методом\n\a");
    piramid();
    goto menu;
    break;
    }
    case 4:
    {system("cls");
    printf("4. Сортировка массива методом выбора\n\a");
    Vibor();
    goto menu;
    break;
    }
    /*case 5:{system("cls");
    }
    */
    case 6: {
        printf("До свидания");
        break;
    }
 
    default:
        printf("Неправильный ввод.\n");
    }
    return 0;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2015, 16:29

Определить - некорректная запись в файл или считывание
Здраствуйте. Написал програму для записи структур в файл а потм считывания и вывода на екрн. Но...

Запись текста в файл\вывод его на экран\сохранение\считывание информации из файла
Ввести текст произвольного содержания в память ПЭВМ. Вывести на экран. Записать текст в файл. ...

Считывание из входного файла байт с N1 по N2 и с N3 по N4 и запись этих байт в выходной файл
Здравствуйте!Помогите пожалуйста написать программу, которая бы считывала из входного файла байты с...


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

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

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