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

Текст записывается в квадратную матрицу, а затем прочитывается по спирали, начиная с центра - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.64
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
12.04.2012, 20:47     Текст записывается в квадратную матрицу, а затем прочитывается по спирали, начиная с центра #1
Всем доброго времени суток!
Кому не сложно, взгляните, пожалуйста.
Дан текстовый файл, содержащий текст, который должен быть зашифрован по следующему принципу: текст записывается в квадратную матрицу (матрица заполняется по строкам), а затем прочитывается по спирали, начиная с центра )против часовой стрелки).
Написать программу, считывающую текст из файла, заполняющую матрицу для шифрования текст, зашифровывающую текст и сохраняющую его в символьном файле.
Текст содержит не более 10000 знаков. Размер матрицы определить исходя из количества символов в файле.

Попыталась написать, ошибок при компиляции не выдает, а при работе зависает и вырубается.

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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <math.h>
int main()
{
    FILE *f;
    FILE *b;
    char txt[10][10];
    int i=0, t=0; 
    int j=0, k=0;
    double v, z;
    f=fopen("text.txt", "rt");
   
    do 
    { 
        fgets (txt[i],50,f);
        txt[i][strlen(txt[i]) - 1]='\0';
         k=k+strlen(txt[i]);               //считаем количество символов в файле
        i++;
      
    }
    while (! feof(f));
    i--;
 
    v=sqrt(k);
    z=ceil(v);
    printf ("%f", z);            //размерность исходного массива
   
   for (j=0;j<i;j++) 
    printf ("%s\n", txt[j]); 
    printf ("%d\n", k); 
        t=z;
     char **a= new char* [t];
     for (i=0; i<t; i++)
     a[i]=new char [t];               
    
    fseek(f,0,SEEK_SET);             
     
     int n=0, m=0;
     do
    {
   if( m == t ) { n=n+1; m = 0; } // заполняем матрицу
   a[n][m] = fgetc( f );
   m ++;
    }
    while ( n != t  );
    
    b=fopen("itog.txt", "wt");
    
     int  i1=15, j1=15, temp=0;        //прочитываем ее по спирали в одномерный массив
     char mas1[t*t]; 
          j=0;
                while(j<j1)
                {
                    i=t-i1;
                    j=t-j1;
                for(j++; j<j1; j++)
                {
                    mas1[temp]=a[i][j];
                    temp++;
                }
                j--;
                for(i++; i<i1; i++)
                {
                    mas1[temp]=a[i][j];
                    temp++;
                }
                i--;
                for(j--; j>=t-j1; j--)
                {
                    mas1[temp]=a[i][j];
                    temp++;
                }
                j++;
                for(i--; i>t-j1; i--)
                {
                    mas1[temp]=a[i][j];
                    temp++;
                }
                i++;
                i1--;
                j1--;
                }
                for(i=t*t-1; i>=0; i--)
                    fputc(mas1[i],f);
 
                              
      getch(); 
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2012, 20:47     Текст записывается в квадратную матрицу, а затем прочитывается по спирали, начиная с центра
Посмотрите здесь:

(CИ)Заполнить матрицу ЛП, от центра по спирали: влево - вниз - вправо - вверх. C++
Заполнить квадратную матрицу размером N x N по спирали C++
Заполнить матрицу из центра по спирали C++
C++ Заполнить массив 3х3 числами по возрастанию, по спирали начиная с центра
C++ Заполнить квадратную матрицу от левого верхнего угла по спирали
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
antoha398
155 / 155 / 3
Регистрация: 29.03.2012
Сообщений: 418
15.04.2012, 22:56     Текст записывается в квадратную матрицу, а затем прочитывается по спирали, начиная с центра #21
zitxbit, можете показать результат работы вашей программы?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
16.04.2012, 06:50     Текст записывается в квадратную матрицу, а затем прочитывается по спирали, начиная с центра #22
Матрица X(n,n):

1, 2, 4, 7, 3
3, 9, 2, 9, 5
5, 6, 4, 6, 1
8, 9, 7, 4, 6
5, 1, 3, 2, 4

Результат OUT(n * n):

2 9 6 4 7 9 6 9 2 4 7 3 5 1 6 4 2 3 1 5 8 5 3 1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2012, 22:18     Текст записывается в квадратную матрицу, а затем прочитывается по спирали, начиная с центра
Еще ссылки по теме:

Начиная с центра, обойти по спирали все элементы квадратной матрицы C++
C++ Заполнить квадратную матрицу по спирали по часовой стрелке
C++ Заполнить квадратную матрицу натуральными числами по спирали

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

Или воспользуйтесь поиском по форуму:
ПаЗитиФкА
3 / 3 / 0
Регистрация: 16.11.2011
Сообщений: 51
23.05.2012, 22:18  [ТС]     Текст записывается в квадратную матрицу, а затем прочитывается по спирали, начиная с центра #23
И все-таки вот она, это работающая прога, мб кому-то пригодится.
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
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<math.h>
int main()
{FILE *f;
 FILE *f1;
 f=fopen("text.txt", "rt");
 char c;
 //char **a;
 int i,j,ic,jc,n,d,x, t;
 double p,k,size;
 size=0;
 do
 {c=fgetc(f);
  printf("%c",c);
  if((c!='\n')&&(c!=EOF)) size++;
 }
 while(!feof(f));
 printf("%f", size);
 
 p=sqrt(size);
 k=ceil(p);
 printf("%f", k);
 printf("\n");
 
 fseek(f,0,SEEK_SET);
 t=k;
 char **a=new char* [t];
 for(i=0; i<t; i++)
 a[i]=new char[t];
 
 for(i=0;i<k;i++)
 for(j=0;j<k;j++)
 {c=fgetc(f);
  if((c!='\n')&&(c!=EOF)) a[i][j]=c;
  else a[i][j]=fgetc(f);
 }
 
 for(i=0; i<k; i++)
 {for(j=0; j<k; j++)
  printf("%c", a[i][j]);
  printf("\n");
 }
 
 if(fmod(k,2)==0)
 {ic=k/2+1;
  jc=k/2;
 }
 else {ic=k/2+1; jc=ic;}
 printf("%d %d",ic,jc);
 
 n=1; i=ic-1; j=jc-1;
 f1=fopen("text2.txt","wt");
 c=a[i][j];
 fputc(c,f1);
 
 if(fmod(k,2)==0)
{ do
 {if(n%2!=0)
  {for(d=0;d<n;d++)
  {j++; c=a[i][j];
 fputc(c,f1);  }
   for(d=0;d<n;d++)
   {i--; c=a[i][j];
 fputc(c,f1); }
  }
  else
  {for(d=0;d<n;d++)
  {j--; c=a[i][j];
 fputc(c,f1); }
   for(d=0;d<n;d++)
   {i++; c=a[i][j];
 fputc(c,f1);}
  }
  n++;
 }
 while(n!=k);
 i=0;
 j=k-2;
 do
 {
        c=a[i][j];
        fputc (c, f1);
        j--;
    }
    while (j>=0);
}
else { do                 //для нечетной
 {if(n%2!=0)
  {for(d=0;d<n;d++)
  {j--; c=a[i][j];
 fputc(c,f1);  }
   for(d=0;d<n;d++)
   {i++; c=a[i][j];
 fputc(c,f1); }
  }
  else
  {for(d=0;d<n;d++)
  {j++; c=a[i][j];
 fputc(c,f1); }
   for(d=0;d<n;d++)
   {i--; c=a[i][j];
 fputc(c,f1);}
  }
  n++;
 }
 while(n!=k);
 i=0;
 j=k-2;
 do
 {
        c=a[i][j];
        fputc (c, f1);
        j--;
    }
    while (j>=0);
}
       fclose(f1);
       
 
 
 delete [] a;
 getch();
}
Yandex
Объявления
23.05.2012, 22:18     Текст записывается в квадратную матрицу, а затем прочитывается по спирали, начиная с центра
Ответ Создать тему
Опции темы

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