Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Ада и другие языки _ Раболта со строками

Автор: Jerry 11.09.2006 21:34

Здравствуйте.
мне надо написать программу-шифровальщик. С вводом рядка. Прога должна реализировать алгоритм: рядок роазбивается на 5 колонок, символы берутся с введеного рядка и записываются на свободное место следнующнй колонки.
Например:
ABC DEF GHK LMN OP
EL AFM BGN CHO DKP // каждый пятый

char arr [100];
puts("Input string:");
gets (arr);
puts("Inputed string");
puts(arr+5);
return 0;



функции эти надо еще предописывать? и как разбивается строка на колонки?

Автор: volvo 11.09.2006 21:58

В результате ты что должна получить? Матрицу? Или просто последовательность символов (каждый 5-ый символ исходной строки)? Не видно этого по приведенному примеру...


Автор: Jerry 11.09.2006 22:06

протсо повледовательность символов...(также разделеных на колонки...)

протсо повледовательность символов...(также разделеных на колонки...)

и функции gets puts описываются так --> ??

#include <studio.h>
int getchar();
int putchar();

Автор: Jerry 11.09.2006 23:12

да... и разделение на столбики... это как бы в строку вставляется табуляцыя? но как ее туда вставить...? строка же может быть различной длины..

Автор: klem4 11.09.2006 23:36

Сам алгоритм шафрования "каждый пятый символ" выглядит так :


# include <stdio.h>
# include <stdlib.h>
# include <strings.h>

char in[100], out[100];

int main (void)
{

gets(in);

int i = 4;
int n = strlen(in);

for (int pos = 0; pos < n; pos++)
{
while (i >= n)
{
i = i - n;
}

out[pos] = in[i];

i = i + 5;
}

puts(out);


return 0;
}



А вот с разбиением не ясно. Нужно раюотать с разбитой на куски строкой или рпосто выводить результат в таком виде ?

Автор: Jerry 11.09.2006 23:56

я думаю просто выводить результат.так проще. чем проще ,тем лучше=)
а можно с комментариями? ато мне не совсем понятно... а надо разобратся...

Автор: volvo 12.09.2006 0:02

Цитата
Сам алгоритм шафрования "каждый пятый символ" выглядит так :
Ты это запускал?

Access Violation не боишься? blink.gif

Автор: klem4 12.09.2006 0:31

Исправил smile.gif)


Я просто через указатели сначала делал) Мм или ты не о том о чем я ?)

Автор: Jerry 12.09.2006 0:37

fatal error C1010 - что значит эта ошибка?

Автор: klem4 12.09.2006 0:40

Цитата
fatal error C1010 - что значит эта ошибка?


Какую строку ты водишь ?

Автор: volvo 12.09.2006 0:45

Кстати, Jerry, если хочешь распечатать это группами по 3, то вот один из вариантов (puts(out) замени на этот код):

...
strrev(out);

i = 0;
while(i + 3 < strlen(out)) {
i += 3;
memmove(&out[i+1], &out[i], strlen(out) - i + 1);
out[i] = ' ';
i++;
}

puts(strrev(out));
...

Автор: Jerry 12.09.2006 1:41

Цитата(klem4 @ 11.09.2006 20:40) *

Какую строку ты водишь ?


это при компиляции выводит...

Цитата(volvo @ 11.09.2006 20:45) *

Кстати, Jerry, если хочешь распечатать это группами по 3, то вот один из вариантов (puts(out) замени на этот код):

Код
...
  strrev(out);

  i = 0;
  while(i + 3 < strlen(out)) {
    i += 3;
    memmove(&out[i+1], &out[i], strlen(out) - i + 1);
    out[i] = ' ';
    i++;
  }

  puts(strrev(out));
...



нет... мне надо чтоб введеная строка, она может быть лубого размера, разбивалась на 5 столбиков... тоесть вставить 4 пробела (или табуляцию)...

Автор: volvo 12.09.2006 2:32

Цитата(Jerry @ 11.09.2006 21:41)
нет... мне надо чтоб введеная строка, она может быть лубого размера, разбивалась на 5 столбиков... тоесть вставить 4 пробела (или табуляцию)...

Ну, тогда заменим число 3 на вычисленную длину каждого из 5 отрезков:

  strrev(out);
int divide = strlen(out) / 5 + (strlen(out)%5 ? 1:0);

i = 0;
while(i + divide < strlen(out)) {
i += divide;
memmove(&out[i+1], &out[i], strlen(out) - i + 1);
out[i] = ' ';
i++;
}

puts(strrev(out));

Автор: Jerry 12.09.2006 20:14

спасибо...
но у мня выводит эту ошибку...

fatal error C1010: unexpected end of file while looking for precompiled header directive
Error executing cl.exe.

Автор: volvo 12.09.2006 20:24

Ты бы лучше сказала, ЧЕМ ты компилируешь? Если у тебя полноценная поддержка C++, то задача будет решаться СОВЕРШЕННО по-другому (хотя тогда непонятно, с чего ты начала приводить решение в стиле С)...

Автор: Jerry 12.09.2006 21:24

Цитата(volvo @ 12.09.2006 16:24) *

Ты бы лучше сказала, ЧЕМ ты компилируешь? Если у тебя полноценная поддержка C++, то задача будет решаться СОВЕРШЕННО по-другому (хотя тогда непонятно, с чего ты начала приводить решение в стиле С)...


Microsoft visual studio в консольном режиме... уже запустилась.

еще раз спасибо. я уже разобралась...
после паскаля немного непривычно в Си и Си++....