Форум программистов, компьютерный форум CyberForum.ru

Запись исходных данных и чтения их из текстового и бинарного файлов! - C++

Восстановить пароль Регистрация
 
001_alex
9 / 13 / 1
Регистрация: 07.04.2012
Сообщений: 56
09.05.2012, 22:37     Запись исходных данных и чтения их из текстового и бинарного файлов! #1
Задание:
К заданиям 1, 2, 3 разработать и добавить функции записи исходных данных в файл и чтения их из файла. Для задания 1, 3 использовать текстовый файл, а задания 2 - бинарный файл.

Задание 1
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
# include <vcl.h>
# include <stdio.h>
# include <conio.h>
# include <math.h>
 
     // прототипы функций
 
     int menu(int kp, char *NAZ[]);
     void main(void);
     void vvod(int *n, int **A);
     void prosm(int n, int *A);
     int zadacha1 (int n, int *A, float *s);
     int zadacha2(int n, int *A);
     float zadacha3 (int n, int *A);
     //  функции
 
     int menu(int kp, char *NAZ[])
     {
     int k, i;
     clrscr();
     for (i=0; i<kp; i++)
     printf("\n %d %s", i+1, NAZ[i]);
     printf("\n\n Vuberi pynkt ->");
     scanf("%d",&k);
     return k;
     }
 
     void main(void)
     {
     int n;
     int *A;
     int kol=6, nom, nuli;
     float sum;
     char*nazv[]={"vvod", "prosmotr",
     "summa moduley elementov masiva, posle poslednego nyla",
     "preobrazovanie,1-e otricatel`nue,2-e nyli,3-e pologitel`nue",
     "summa otrizatel'nuh elementov vektora", "vuhod"};
     while(1)       // for(; ; )
     {
     nom=menu(kol, nazv);
     switch(nom)
       {
           //Ввод
          case 1: vvod(&n, &A ); break;
           //Просмотр
          case 2: prosm(n, A ); break;
           //Первое задание
              case 3: nuli = zadacha1(n, A, &sum);   clrscr();
                if (nuli)
                    {
                        if (sum == -1)
                          printf("nylei v zadannom masive net");
                        else
                          if (sum != -1)
                            printf("\n summa moduley elementov masiva, posle poslednego nyla = %5.2f",sum);
                    }
                getch();
              break;
        // Второе задание
          case 4: zadacha2(n, A);
              break;
        // Третье задание
          case 5: zadacha3(n, A);
              break;
        //Выход
              case 6: return;
       }
     }
}
//Ввод
     void vvod(int *n, int **D)
     {
      int i;
     clrscr( );
     printf("Vvedite razmernost' -> ");
     scanf("%d", n);
     int *A = new int [*n];
       for (i=0; i<*n; i++)
     {
       printf(" A[%d]= ", i);
       scanf("%d", &A[i]);
     }
     *D=A;    //запись адреса выделенной памяти в указатель, адрес которого 
                //находится в указателе D
     }
//Просмотр
     void  prosm(int n, int *A)
     {
       int i;
       clrscr( );
     for (i=0; i<n; i++)
       printf("\n A[%d]=%d", i, A[i]);
         getch();
      }
// Первое задание
     int zadacha1(int n, int *A, float *s)
     {
     int i, k;
     k = 0; // для проверки на отсутствие нулей в массиве
     for (i=0; i<n; i++)
        if (A[i] == 0) {k = 1;}// нули присутствуют
     if (k == 1)
      {
        *s = 0;
        i = n-1;
        while(A[i] !=0)// считаем сумму с последнего элемента до нуля
         {
                *s += fabs(A[i]);
                i--;
         }
      }
     else
        if (k == 0) {*s = -1;}
     }
// Второе задание
     int zadacha2(int n, int *A)
     {
     int *B = new int [n]; //преобразованный массив
     int i, j=0;
     //Записываем отрицательные элементы в массив
     for (i=0; i<n; i++)
        if (A[i] < 0)
        {
           B[j] = A[i];
           j++;
        }
     //Записываем нулевые элементы в массив
     for (i=0; i<n; i++)
        if (A[i] == 0)
        {
           B[j] = A[i];
           j++;
        }
     //Записываем положительные элементы в массив
     for (i=0; i<n; i++)
        if (A[i] > 0)
        {
           B[j] = A[i];
           j++;
        }
     //Вывод на экран
     clrscr( );
     printf("\n Poluchenuy massiv");
     for (j=0; j<n; j++)
        printf("\n B[%d]=%d", j+1, B[j]);
     getch();
     }
// Третье задание
     float zadacha3(int n, int *A)
     {
        int MinE = A[0], MaxE = A[0], j_min=0, i, j, proverka;
        float d, summa;
        //Нахождение минимального элемента и его места
        for(i=1; i < n; ++i)
           if (A[i] < MinE)
              MinE=A[i];
         //Нахождение места минимального элемента
         for(i=0; i < n; ++i)
            if (A[i] == MinE)
               j_min=i;
         //Проверка на упорядоченность по возрастанию
         for (i=j_min-1; i<n-1; i++)
            for (j=i+1; j<n; j++)
                if(A[i]<A[j])
                   proverka = 0;
                else
                {
                   proverka = 1;
                   break;
                }
         //Подсчёт суммы
         if (proverka == 0)
         {
            i=0;
            summa=0;
            while(i !=j_min)
            {
               summa+=A[i];
               i++;
            }
         //Нахождение максимального элемента
            for(i=1; i < n; ++i)
              if (A[i] > MaxE)
                 MaxE = A[i];
         d = (summa/MaxE);
         }
        clrscr( );
        if (proverka == 0)
        printf("\nsumma = %f", d);
        else
        printf("\nelementu ne yporydochenu");
        getch();
     }
Задание 2
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
212
213
214
215
216
217
218
# include <vcl.h>
# include <stdio.h>
# include <conio.h>
# include <math.h>
 
/*Прототипы функций*/
     int menu(int kp, char*NAZ[]);
     void main(void);
     void vvod(int*n, int ***A);
     void prosm(int n, int **A);
     int zadacha1(int n, int **A);
     int zadacha2 (int n, int **A);
     int zadacha3 (int n, int **A);
 
/*Функции*/
     int menu(int kp, char*NAZ[])
     {
     int k, i;
     clrscr();
     for (i=0; i<kp; i++)
     printf("\n %d %s", i+1, NAZ[i]);
     printf("\n\n Vuberite punkt -> ");
     scanf("%d",&k);
     return k;
     }
 
     void main(void)
     {
     int n;
     int **A;
     int kol=6, nom;
     char*nazv[]={" Vvod", " Prosmotr",
     " Esli summa po moduly, elementov kagdogo posledyeyshchego slolbca\nmen'she pred'idyshchego, to ko vsem eleventam ctolbcov s nechetnymi\nnomerami indeksov dobavit' maksimal'nuy element, sredi elementov\nstoyshcih nad glavnoy dioganal`y ",
     " Nomer stroki, v kotoroy nahoditsy samay dlinnay ceriy odinakovyh\nelementov ",
     " Maksimum sredi summ elementov diagonale', parallel'nuh pobochnoy\ndiagonali",
     " Vuhod"};
     while(1)
     { nom=menu(kol, nazv);
     switch(nom)
       {
          case 1: vvod(&n, &A); break;
          case 2: prosm(n, A); getch(); break;
          case 3: zadacha1(n, A); break;
          case 4: zadacha2(n, A); break;
              case 5: zadacha3(n, A); break;
        case 6: return;
       }
    }
     }
/*Ввод*/
     void vvod(int*n, int ***D)
     {
      int i,j;
      int **A=new int* [*n];
     clrscr( );
     printf("Vvedite razmernost` -> ");
     scanf("%d", n);
       for (i=0; i<*n; i++)
          A[i]=new int [*n];
       for (i=0; i<*n; i++)
       for (j=0; j<*n; j++)
     {
        printf("\n A[%d][%d]=", i+1, j+1);
            scanf("%d", &A[i][j]);
     }
     *D=A;   //
     }
/*Просмотр*/
     void  prosm(int n, int **A)
     {
     int i, j;
     clrscr( );
     printf("Ishodnay matrica\n\n");
     for (i=0; i<n; i++)
        {
           for (j=0; j<n; j++)
           {
              printf("    %d", A[i][j]);
           }
        printf("\n\n");
        }
     }
/*Задание №1*/
     int zadacha1(int n, int **A)
     {
     int i, j, proverka, max;
     int *sum = new int [n];/*Массив сумм*/
     int **B=new int* [n]; /*Копия исходного массива*/
     /*Копируем массив*/
     for (i = 0; i < n; i++)
        B[i]=new int [n];
     for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
           {
              B[i][j] = A[i][j];
           }
     /*Считаем суммы в столбцах и записываем их в массив*/
     for (j = 0; j < n; j++)
        {
           sum[j] = 0;
           for (i = 0; i < n; i++)
              sum[j]+=B[i][j];
        }
     /*Сравниваем суммы*/
     for (j = 0; j < n-1; j++)
        if (abs(sum[j]) < abs(sum[j+1])) proverka = 0;
        else
           {
              proverka = 1;
              break;
           }
     if (proverka == 0)
        {
           /*Ищем максимальный элемент, стоящий над главной диоганалью*/
           max = B[0][0];
           for (i = 0; i < n; i++)
              for (j = 0; j < n; j++)
              if (j > i)
              {
                 if (B[i][j] > max)
                    {
                       max = B[i][j];
                    }
              }
           /*Добавляем максимальный элемент, ко всем элементам, столбцов,
           с нечётными номерами индексов*/
           for (j = 0; j < n; j++)
           {
              for (i = 0; i < n; i++)
                {
                 if ((fmod(i,2) == 0)&&(fmod(j,2) == 0))
                    B[i][j] = B[i][j] + max;
                }
           }
        /*Вывод*/
        prosm(n, A);
        printf("Ishodnay matrica bula izmenena\n\n");
        for (i=0; i<n; i++)
          {
             for (j=0; j<n; j++)
             {
                printf("    %d", B[i][j]);
             }
          printf("\n\n");
          }
        getch();
        }
     else
        {
           /*Вывод*/
           prosm(n, A);
           printf("\nIshodnay matrica ne izmenena");
           getch();
        }
     }
/*Задание №2*/
     int zadacha2(int n, int **A)
     {
     int kol, i, j, i_max, A_max;
     int *kol_pov = new int [n];/*Массив для записи, количества повторов*/
     /*Считаем количество повторов, и записываем в массив*/
     for (i = 0; i < n; i++)
        {
        kol = 0;
           for (j = 0; j < n-1; j++)
            if (A[i][j] == A[i][j+1])
                kol++;
        kol_pov[i] = kol;
        }
     /*Ищем строку с наибольшим количеством повторов*/
     i_max = 0;
     A_max = kol_pov[0];
     for (i = 1; i < n; i++)
        if (A_max < kol_pov[i])
           {
                A_max = kol_pov[i];
                i_max = i;
           }
     /*Вывод*/
     prosm(n, A);
     if (kol != 0)
        printf("\nStroka, v kotoroy samay dlinnay seriy elementov = %d", i_max+1);
     else
        printf("\nTakoy stroki ne naydeno !");
     getch();
     }
/*Задание №3*/
     int zadacha3(int n, int **A)
     {
     int i, j, max_sum, m;
     int *sum = new int [2*n-2];
     /*Очистка массива*/
      for (m = 0; m < 2*n-2; m++)
         sum[m] = 0;
      /*Счиитаем сумму елементов на диоганалях, выше и паралельных
      побочной. Записываем в массив*/
      for(m = 0; m < n-1 ; m++)
         for(i = 0; i < n-1; i++)
            for(j = 0; j < n-1; j++)
               if(i+j == m)
                  sum[m] += A[i][j];
      /*Счиитаем сумму елементов на диоганалях, ниже и паралельных
      побочной. Записываем в массив*/
      for(m = n-1; m < 2*n-2; m++)
         for(i = 1; i < n; i++)
            for (j = 1; j < n; j++)
               if((i+j) == (m+1))
                  sum[m] += A[i][j];
     /*Ищем максимум среди сумм*/
     max_sum = sum[0];
     for (m = 1; m < 2*n-2; m++)
        if ( sum[m] > max_sum)
           max_sum = sum[m];
     /*Вывод*/
     prosm(n, A);
     printf("\nMaksimum sredi summ elementov diagonale', parallel'nuh pobochnoy\ndiagonali = %d", max_sum);
     getch();
     }
Задание 3 состоит из двух задачь вот они
первая
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
#include <conio.h>
#include <stdio.h>
#include <string.h>
#include <locale>
using namespace std; 
void main()
{
  char *a = new char [1000];
  char *a1 = new char [1000];
  int k = 1;
  puts("Vvedite stroku(na angliyskom):");
  gets(a);
  int n = strlen(a);
   if(n > 80)
   {
      n=80;
      *(a+80)=0;
   }
  char *pa=a;
  char *pa1=a1;
  while(pa-a < n)
  {
     if(ispunct(*pa) || *pa==' ')/*Если a[i] равен знаку пунктуации*/
     {  /*Проверяем следующие a[i]-е на знаки пунктуации*/
        while(ispunct(*pa) || *pa==' ')
        {
           *pa1 = *pa;
           pa1++;
           pa++;
        }
        /*Считаем слова*/
        k++;
    }else
    /*Если третье слово, то ставим '/', перед каждым символом*/
    if (k == 3)
    {
           *pa1= '/';
           *(pa1+1) = *pa;
           pa1+=2;
           pa++;
    }
    /*Если не третье слово, то просто копируем*/
    else
    {
           *pa1 = *pa;
           pa1++;
           pa++;
    }
  }
  *pa1=0;
  puts(a1);
  delete[] a;
  delete[] a1;
  getch();
}
вторая
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
#include <vcl.h>
#include<stdio.h>
#include<conio.h>
#include<ctype.h>
 
 
void main()
{
  int i, i_A = 0, kol = 0, i_B = 0, j = 0;
  char st[1000], st1[1000];
  puts("Vvedite stroku(na angliyskom):");
  gets(st);
  int n=strlen(st);
/*Первая часть задания : "Подсчитать количество символов '+', стоящих между  'A' и 'B'"*/
   /*Ищем местоположение'A', первого в строке*/
   for (i = 0; i < n; i++)
        if(st[i] == 'A')
        {
                i_A = i;
                break;
        }
   /*Ищем местоположение'B', последнего в строке*/
   for (i = n; i > 0; --i)
        if(st[i] == 'B')
        {
                i_B = i;
                break;
        }
   /*Считаем количество '+'*/
   for (i = i_A; i < i_B; i++)
        if(st[i] == '+')
                kol=kol+1;
   printf("Kolichestvo '+', mezdy pervum'A' i poslednim'B' ravno: %d\n",kol);
/*Втрая часть задания : "Заменить каждый символ '0' на 'OO'"*/
   for (i = 0; i < n; i++)
        if (st[i] == '0') /*Ищем '0' и заменяем на 'OO'*/
        {
           st1[j] = 'O';
           st1[j+1] = 'O';
           j = j+2;
        }
        else
        {
           st1[j] = st[i];
           j = j+1;
        }
   if (j == i)
   {
      printf("V stroke ne bulo '0', ishodnay stroka:\n");
      puts(st);
      getch();
   }
   else
   {
      printf("Poluchennay stroka:\n");
      puts(st1);
      getch();
   }
}
Или просто напишите отдельные функции с подробными пояснениеми, функцию записи и чтения в текстовый фаил, записи и чтения в бинарный файл. А я сам применю эти функции в задачах.
Зарание огромное спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2012, 22:37     Запись исходных данных и чтения их из текстового и бинарного файлов!
Посмотрите здесь:

Создать файл, в котором чередовались бы элементы исходных файлов C++
Открытие бинарного файла для чтения C++
C++ Создание файла для записи и чтения, запись в файл данных
C++ Компиляция исходных файлов
Функция чтения столбцов чисел из текстового файла C++
C++ Запись и считывания бинарного дерева с текстового документа
C++ Запись данных в переменную из текстового файла
Считывание из бинарного файла и запись данных в две строковых переменные C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 07:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru