Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > работа с блоками


Автор: dolboxlop 10.12.2011, 21:15
программа шифрует текст методом двойной перстановки, тоесть переставляет столбик и столбец.
входные данные: файл тхт с текстом  и с клавы вводить 2 числа(длина матрицы) и затем вводятся ключи(как перставлять) допустим 4-5-4231-52413

допустим у нас матрица 5 на 5, тоест ьмы можем считать 25 символов. задача такая: чтобы прога считала пару блоков, тоесть если 150 символов, то прога проходит 6 блоков. есть 2 идеи: прочитать весь  массив в строку и работать уже со строкой(но не рационально) 2-считывать с текста, пока не будет 0х0. но я не могу это написать, помогите одним из способов 

Код

#include<stdio.h>
#include<iostream>
#include<conio.h>
#include<time.h>
#include<stdlib.h>
#include<ctype.h>
using namespace std;

int main(){
    char A[100][100],B[100][100];
    int i,j,k,m,c,d,K,C[50],D[50];
    cout<<"vvedite dliny kluchei, vnachale visote,potom dliny"<<endl;
    cin>>d>>c;
    
    for(i=0;i<d;i++)            // d-высота массива  D[i]- массив столбца
        cin>>D[i];
    for(i=0;i<c;i++)            //c-длина С[i]- длина
        cin>>C[i];
    
    
    for(i=0;i<d;i++){            // заполняем массив шлаком
        for(j=0;j<c;j++) 
            A[i][j]=' ';
            //rand()%26+'a';
            }


    freopen("input.txt","r",stdin);
    freopen("output.txt","w",stdout);

    for(i=0;i<d;i++)                           // вводим массив
        for(j=0;j<c;j++)
            scanf("%c",&A[i][j]);

    for(i=0;i<d;i++){                            //работаем с переварачиваением строк  о-длина столбцов
        k=D[i];
        for(j=0;j<c;j++){
            B[k-1][j]=A[i][j];
        }                 
    }
    for(j=0;j<c;j++){                      
        for(i=0;i<d;i++)
            A[i][k-1]=B[i][j];
    }  
    
    for(i=0;i<d;i++)
        for(j=0;j<c;j++)
            printf("%c",A[i][j]);
    return 0;  
}


Автор: Леопольд 11.12.2011, 10:27
dolboxlop, разбей алгоритм на функции. Хотя бы напиши функцию swap которая переставляет местами строку и столбец. Код будет понять намного проще.

Автор: dolboxlop 11.12.2011, 10:47
код правильно всё работает, просто мне нужно понять, как сделать так, чтобы он считывал второй раз из файла с того место, где он закончил в первый раз. я нуб в функциях, пока всё по алгоритмам делаю(

Автор: Леопольд 11.12.2011, 16:00
Цитата(dolboxlop @  11.12.2011,  10:47 Найти цитируемый пост)
просто мне нужно понять
Мне тоже, что-бы помочь. Пока не напишешь хотя-бы swap, я не почешусь...  smile 

Автор: dolboxlop 11.12.2011, 16:16
злые вы(  smile 
да что там непонятно то) просто меняем столбик и столбец, говорю в самцу прогу не надо лезть, нужно сделать так, чтобы она пару раз считывала текст, разбитый по частям

Автор: volatile 11.12.2011, 17:20
Цитата(dolboxlop @  11.12.2011,  16:16 Найти цитируемый пост)
просто меняем столбик и столбец, говорю в самцу  

Какому самцу, 
что такое столбик, и что такое столбец? 
в чем отличие столбика от столбца?
smile 

Цитата(dolboxlop @  10.12.2011,  21:15 Найти цитируемый пост)
у нас матрица 5 на 5, тоест ьмы можем считать 25 символов. задача такая: чтобы прога считала пару блоков, тоесть если 150 символов

здесь тоже не понял, пару блоков = 150 символов. 
Ахинея какая-то.

Цитата(dolboxlop @  11.12.2011,  16:16 Найти цитируемый пост)
да что там непонятно то

Действительно, здесь все тупые.


Автор: Леопольд 11.12.2011, 18:13
Цитата(dolboxlop @  11.12.2011,  16:16 Найти цитируемый пост)
да что там непонятно то)
Если разбираться, уверен что всё просто. Но я не собираюсь разбираться с плохо оформленным кодом, мне моё время дорого. Хуже того, велик шанс, что разбивая алгоритм на составные, решишь проблему сам...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)