Як ви розумієте слова Норберт а Вінера (засновника кібернет ИКИ): «Обчислювальна машина цінна рівно на стільки, на скільки цінна людина, що її використовує»?
Итак, целевой язык - C++. Это значит мы - радостные обладатели технологии потоков, с коей мы будем производить весь ввод/вывод как при работе с файлами, так и при работе со стандартным вводом/выводом (консолью).
Ну а раз уж мы работаем с потоками, то будем делать это красивенько: создадим класс-обёртку для потока ввода, цель которого - поиск в этом потоке цитат и отправка их на поток вывода (который мы передаём).
[!] Стоит отметить, что по заданию не сказано, что есть разница между ' и ". Поэтому будем считать их одинаковыми.
[!] Внимание! Рядом с исполняемым файлом надо создать текстовый файл data.txt c текстом и цитатами.
Код
С++11
#include <iostream>#include <fstream>using std::cout;class QuotesFinder { std::istream &in_stream; bool is_it_in_quote = false;public: QuotesFinder() = delete; QuotesFinder(QuotesFinder&&) = default; QuotesFinder(QuotesFinder const&) = default; explicit QuotesFinder(std::istream &is) : in_stream(is) {} [[nodiscard]] bool eof() const { return in_stream.eof(); } // Вот тут происходит вся магия QuotesFinder& operator >> (std::ostream& out_stream) { char buffer; in_stream.get(buffer); //Получаем очередной символ из потока if (buffer == '\"' || buffer == '\'') { if (is_it_in_quote) { is_it_in_quote = false; out_stream << buffer; out_stream << "\n"; return *this; } is_it_in_quote = true; } if (is_it_in_quote) { out_stream << buffer; } return *this; }};int main() { std::ifstream file("data.txt"); // Открываем файл if (!file.is_open()) { cout << "File is not exits!"; return 1; } QuotesFinder finder(file); // Создаём обёртку из файлового потока while (!finder.eof()) // Пока не достигли конца потока finder >> cout; // переправляем очередной кусок информации в поток вывода}
Const n=6; var x:array[1..n] of integer=(-1, 1, 2, -2, -3, 3); y,z:array[1..n] of integer; i,i1,i2:integer; begin for i:=1 to n do write(x[i]:3); writeln; i1:=0; i2:=0; for i:=1 to n do if x[i]>0 then begin i1:=i1+1; y[i1]:=x[i]; end else if x[i]<0 then begin i2:=i2+1; z[i2]:=x[i]; end; writeln(' Y: Z:'); for i:=1 to n do if (i1>=i)and(i2>=i) then writeln(y[i]:3,z[i]:4) else if i1>=i then writeln(y[i]:3) else if i2>=i then writeln(z[i]:7); end.
Итак, целевой язык - C++. Это значит мы - радостные обладатели технологии потоков, с коей мы будем производить весь ввод/вывод как при работе с файлами, так и при работе со стандартным вводом/выводом (консолью).
Ну а раз уж мы работаем с потоками, то будем делать это красивенько: создадим класс-обёртку для потока ввода, цель которого - поиск в этом потоке цитат и отправка их на поток вывода (который мы передаём).
[!] Стоит отметить, что по заданию не сказано, что есть разница между ' и ". Поэтому будем считать их одинаковыми.
[!] Внимание! Рядом с исполняемым файлом надо создать текстовый файл data.txt c текстом и цитатами.
КодС++11
#include <iostream>#include <fstream>using std::cout;class QuotesFinder { std::istream &in_stream; bool is_it_in_quote = false;public: QuotesFinder() = delete; QuotesFinder(QuotesFinder&&) = default; QuotesFinder(QuotesFinder const&) = default; explicit QuotesFinder(std::istream &is) : in_stream(is) {} [[nodiscard]] bool eof() const { return in_stream.eof(); } // Вот тут происходит вся магия QuotesFinder& operator >> (std::ostream& out_stream) { char buffer; in_stream.get(buffer); //Получаем очередной символ из потока if (buffer == '\"' || buffer == '\'') { if (is_it_in_quote) { is_it_in_quote = false; out_stream << buffer; out_stream << "\n"; return *this; } is_it_in_quote = true; } if (is_it_in_quote) { out_stream << buffer; } return *this; }};int main() { std::ifstream file("data.txt"); // Открываем файл if (!file.is_open()) { cout << "File is not exits!"; return 1; } QuotesFinder finder(file); // Создаём обёртку из файлового потока while (!finder.eof()) // Пока не достигли конца потока finder >> cout; // переправляем очередной кусок информации в поток вывода}var x:array[1..n] of integer=(-1, 1, 2, -2, -3, 3);
y,z:array[1..n] of integer;
i,i1,i2:integer;
begin
for i:=1 to n do write(x[i]:3);
writeln;
i1:=0; i2:=0;
for i:=1 to n do
if x[i]>0 then begin i1:=i1+1; y[i1]:=x[i]; end
else if x[i]<0 then begin i2:=i2+1; z[i2]:=x[i]; end;
writeln(' Y: Z:');
for i:=1 to n do
if (i1>=i)and(i2>=i)
then writeln(y[i]:3,z[i]:4)
else if i1>=i then writeln(y[i]:3)
else if i2>=i then writeln(z[i]:7);
end.
Результат:
-1 1 2 -2 -3 3
Y: Z:
1 -1
2 -2
3 -3