Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 13.06.2011
Сообщений: 18

С++ ВАЖНО. тяжело

13.06.2011, 13:02. Показов 1468. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Составить подпpогpамму, котоpая читает постpочно текст дpугой пpогpаммы
на языке Паскаль (вводится с клавиатуpы), содеpжащий не более 10 стpок
(стpока - не более 80 символов), обнаpуживает комментаpии и печатает их.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.06.2011, 13:02
Ответы с готовыми решениями:

Тяжело ли Вам программировать на C++?
Тяжело ли Вам программировать на с++?:rofl:

нужно исправить ошибку в коде) кому не тяжело
#include <iostream> using namespace std; template< class T > void insertSort(T* a, int size) { T tmp; for (int i = 1,...

очень тяжело,метод квайна-мак-класки
Поиск минимальной конъюнктивный нормальной формы булевой функции (случай зависимости функции от 4 переменных) по методу Квайна-Мак-Класки

9
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
13.06.2011, 13:06
что сложного?
от { до } печатай.
0
В вечном поиске...
 Аватар для Nursik77
275 / 235 / 30
Регистрация: 05.04.2011
Сообщений: 645
13.06.2011, 13:06
Тема по с++, а пишешь написать на Паскале
0
1 / 1 / 0
Регистрация: 13.06.2011
Сообщений: 18
13.06.2011, 13:08  [ТС]
Цитата Сообщение от OstapBender Посмотреть сообщение
что сложного?
от { до } печатай.
ну правильно

Добавлено через 1 минуту
Цитата Сообщение от Nursik77 Посмотреть сообщение
Тема по с++, а пишешь написать на Паскале
в этом и суть читай внимательно!!!
0
В вечном поиске...
 Аватар для Nursik77
275 / 235 / 30
Регистрация: 05.04.2011
Сообщений: 645
13.06.2011, 13:09
Извиняй, невнимателен
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.06.2011, 13:58
Лучший ответ Сообщение было отмечено как решение

Решение

Так нужно?
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
diagon@shadeware:~$ ./a.out
Enter code:
var x:integer; //variable
begin 
{some code}
readln; //pause
end.
variable
 
some code
 
pause
 
diagon@shadeware:~$
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <sstream>
#include <algorithm>
int main(){
    std::cout << "Enter code:\n";
    std::string code;
    for (std::string line;!count(line.begin(),line.end(),'.');code.push_back('\n')){
        std::getline(std::cin,line);
        code += line;
    }  //теперь в code лежит весь код
    bool x=false,y=false;
    for (std::string::iterator it = code.begin(); it != code.end(); ++it){
        if (*it == '}') {y = false; std::cout << std::endl;}
        if (*it == '\n'){x = false; std::cout << std::endl;}
        if (x||y) std::cout << *it;
        if (*it == '{') y = true;
        if (*it == '/' && *(it+1) == '/') {x = true; ++it;}
    }
    return 0;
}
P.S. он считывает до точки
C++
1
!count(line.begin(),line.end(),'.')
Если что, переделайте до себя.
3
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
13.06.2011, 15:43
Code
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
[nameless@desktop cpp]$ ./comments sample.pas
File sample.pas contents:
----------------------------------------------
const
  len = 26;
 
  {Это символы для выбора столбца таблицы}
  alpha_hor: string = 'abcdefghijklmnopqrstuvwxyz';
 
  {Здесь будут символы для выбора строки таблицы}
  alpha_ver: string = '';
 
var
  {Это собственно таблица кодирования}
  table: array[1 .. len, 1 .. len] of char;
 
{функция получает строку S и возвращает строку,
  полученную из исходной сдвигом на N позиций}
function shift(s: string; n: integer): string;
  begin
    s := copy(s, length(s) - pred(n), n) + s;
    delete(s, length(s) - pred(n), n); shift := s
  end;
 
var
  i, j, row, col: integer;
  s: string; ch: char;
 
  key: string;
  is_russian: boolean;
  f_in: file of char; f_out, f_key: text;
begin
  { Заполнение таблицы кодировки }
  for i := 1 to len do begin
    {получаем строку символов для текущей строки таблицы}
    s := shift(alpha_hor, pred(i));
    for j := 1 to len do
      table[i, j] := s[j];
    {
      не забываем первый символ заносить в "хранилище"
      для выбора строк по кодируемой букве
    }
    alpha_ver := alpha_ver + s[1]
  end;
 
  { связываем логические файлы программы с физическими файлами на диске }
 
  { файл с фразой для кодирования - открываем для чтения }
  assign(f_in, 'f_00in.txt');
  {$i-} reset(f_in); {$i+}
 
  { файл для сохранения результата - открываем для записи }
  assign(f_out, 'f_00out.txt');
  {$i-} rewrite(f_out); {$i+}
 
  {
    файл, содержащий ключевое слово - открываем для чтения,
    считываем слово в строковую переменную и закрываем файл
  }
  assign(f_key, 'f_00key.txt');
  {$i-} reset(f_key); {$i+}
  readln(f_key, key);
  close(f_key);
 
  { счетчик закодированных символов }
  i := 0;
  {до конца кодируемого файла делаем следующее:}
  while not eof(f_in) do begin
    { читаем очередной символ }
    read(f_in, ch);
    { находим по нему строку таблицы }
    row := pos(ch, alpha_ver);
    {
      эта переменная содержит значение успеха предыдущей операции
      (если True, то символ присутствует в таблице, иначе False)
    }
    is_russian := (row > 0);
    if is_russian then begin
      { Если символ присутствует в таблице, его надо кодировать }
 
      { увеличиваем счетчик закодированных символов }
      inc(i);
 
      {
        находим столбец по значению ключевого символа
        (операция mod используется, чтобы исключить выход
        за пределы ключа, т.к. длина ключа обычно меньше
        длины шифруемой последовательности)
      }
      col := pos(key[i mod (length(key))], alpha_hor);
      { и заменяем простой символ на зашифрованный (из таблицы) }
      ch := table[row, col];
    end;
    {
      если символ надо было шифровать, он уже зашифрован,
      если он не может быть зашифрован, он остался без изменений.
      Пишем его в выходной файл
    }
    write(f_out, ch)
  end;
 
  { И закрываем оба файла: исходный и зашифрованный }
  close(f_out);
  close(f_in)
end.
----------------------------------------------
 
Это символы для выбора столбца таблицы
Здесь будут символы для выбора строки таблицы
Это собственно таблица кодирования
функция получает строку S и возвращает строку,
  полученную из исходной сдвигом на N позиций
 Заполнение таблицы кодировки 
получаем строку символов для текущей строки таблицы
 
      не забываем первый символ заносить в "хранилище"
      для выбора строк по кодируемой букве
    
 связываем логические файлы программы с физическими файлами на диске 
 файл с фразой для кодирования - открываем для чтения 
$i-
$i+
 файл для сохранения результата - открываем для записи 
$i-
$i+
 
    файл, содержащий ключевое слово - открываем для чтения,
    считываем слово в строковую переменную и закрываем файл
  
$i-
$i+
 счетчик закодированных символов 
до конца кодируемого файла делаем следующее:
 читаем очередной символ 
 находим по нему строку таблицы 
 
      эта переменная содержит значение успеха предыдущей операции
      (если True, то символ присутствует в таблице, иначе False)
    
 Если символ присутствует в таблице, его надо кодировать 
 увеличиваем счетчик закодированных символов 
 
        находим столбец по значению ключевого символа
        (операция mod используется, чтобы исключить выход
        за пределы ключа, т.к. длина ключа обычно меньше
        длины шифруемой последовательности)
      
 и заменяем простой символ на зашифрованный (из таблицы) 
 
      если символ надо было шифровать, он уже зашифрован,
      если он не может быть зашифрован, он остался без изменений.
      Пишем его в выходной файл
    
 И закрываем оба файла: исходный и зашифрованный 
[nameless@desktop cpp]$
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
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
 
int main(int argc, char* argv[])
{
    if(argc != 2)
    {
    std::cerr << "Usage: " << *argv << " FILE" << std::endl;
    return 1;
    
    }
    
 
    std::ifstream ifs(argv[1]);
 
    if(!ifs)
    {
    std::cerr << "Can't open file " << argv[1] << std::endl;
    return 1;
    }
 
    std::cout << "File " << argv[1] << " contents:" << std::endl;
    std::cout << "----------------------------------------------" << std::endl;
    
    std::filebuf* pbuf = ifs.rdbuf();
    std::cout << pbuf << std::endl;
 
    size_t size = pbuf->pubseekoff(0, std::ios::end, std::ios::in);
    pbuf->pubseekpos(0, std::ios::in);
 
    char* buffer = new char[size];
 
    pbuf->sgetn(buffer, size);
 
    char *cbeg, *cend;
    
    cbeg = strchr(buffer, '{');
 
    std::cout << "----------------------------------------------" << std::endl;
    std::cout << std::endl;
    
    while(cbeg)
    {
    cend = strchr(cbeg, '}');
    if(!cend)
        break;
 
    fwrite(cbeg + 1, sizeof(char), cend - cbeg - 1, stdout);
    putchar('\n');
    cbeg = strchr(cbeg + 1, '{');
    }
    
    delete[] buffer;
    
    return 0;
}
1
Эксперт С++
 Аватар для schdub
3073 / 1411 / 425
Регистрация: 19.01.2009
Сообщений: 3,894
13.06.2011, 18:51
diagon, не обрабатываются комментарии в строках. Например, для такого файла:
Pascal
1
2
3
4
5
6
7
const str1 = '// commnent 1 in string';
      str2 = '{ commnent 2 in string }';
var x:integer; //variable
begin 
{some code}
readln; //pause
end.
Вот такой вывод:
Code
1
2
3
4
5
6
7
8
 commnent 1 in string';
 commnent 2 in string 
 
variable
 
some code
 
pause
Добавлено через 2 минуты
Nameless One, у Вас не обрабатываются много строчные комментарии в строках и почему-то не выведен последний коммент //pause. Вывод:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
oleg@oleg-laptop:~/src/tmp$ ./a.out code.pas
File code.pas contents:
----------------------------------------------
const str1 = '// commnent 1 in string';
      str2 = '{ commnent 2 in string }';
var x:integer; //variable
begin 
{some code}
readln; //pause
end.
 
 
----------------------------------------------
 
 commnent 2 in string 
some code
oleg@oleg-laptop:~/src/tmp$
0
Эксперт С++
 Аватар для Nameless One
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
13.06.2011, 18:56
schdub, как видно из кода, у меня обрабатываются только многострочные комментарии (появление символов '{', '}' в строковых литералах не обрабатывается).
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
13.06.2011, 20:17
Цитата Сообщение от schdub Посмотреть сообщение
diagon, не обрабатываются комментарии в строках.
Да там вообще мало что делается, фактически это тупо алгоритм, написанный на коленке=)
Я делал подобное задание в книге Страуструпа, только там нужно было удалить эти комментарии с учетом строковых констант, но исходник к сожалению не сохранился. Решал через вектор строк, в который заносил символы из считанной строки без учета собственно комментариев, использовал несколько (3 или больше) булевых переменных. В общем не сложно и здесь то же самое сделать, т.к. в паскале, насколько я помню, нету " а есть только '

Добавлено через 20 минут
Вот немного доработанный вариант, но баги еще могут быть, так как это очень халявное решение =)
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
diagon@shadeware:~$ ./a.out
Enter code:
const str1 = '// commnent 1 in string';
      str2 = '{ commnent 2 in string }';
var x:integer; //variable
begin 
{some code}
readln; //pause
end.
----------------------------------------------------------------
 
variable
some code
pause
diagon@shadeware:~$
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <sstream>
#include <algorithm>
int main(){
        std::cout << "Enter code:\n";
        std::string code;
        for (std::string line;!count(line.begin(),line.end(),'.');code.push_back('\n')){
                std::getline(std::cin,line);
                code += line;
        }  
        std::cout << "----------------------------------------------------------------\n";
        bool x=false,y=false;
        unsigned q = 0;
        for (std::string::iterator it = code.begin(); it != code.end(); ++it){        
                if (*it == '}') {y = false; std::cout << std::endl; }
                if (*it == '\n') { if (x) std::cout << std::endl; x = false; }
                if (*it == '\'') ++q;
                if ((x||y)&&q%2==0) std::cout << *it;
                if (*it == '{') y = true; 
                if (*it == '/' && *(it+1) == '/' && q%2 == 0) {x = true; ++it;}
        }
        return 0;
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.06.2011, 20:17
Помогаю со студенческими работами здесь

Тяжело ли написать утилитку, которая работает как DOS-команда "pause"
Тяжело ли написать утилитку, которая работает как DOS-команда &quot;pause&quot;, но с автопродолжением через (например) 10 секунд? Научился...

Массив в С++ ВАЖНО
Заданы два одномеpных массива X и Y, содеpжащие кооpдинаты N точек на плоскости. Опpеделить, сколько точек попадет внутpь окpужности с...

Важно-Функции
Прошу помочь с программами! В задачах нужно использовать функции. 1) Дан одномерный массив, состоящий из N целочисленных элементов. ...

Важно ли с чего начать?
Всем привет хочу спросить важно ли с чего 'войти' в программирование(опыт программирования на C++ уже есть но не серьезный) просто хочу...

Важно для новичка
Здравствуйте уважаемые участники. Я задам вам вопрос, который является достаточно сложны для меня, по причине &quot;низкой обзорной...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru