СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

Организационный момент

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Задачи по программированию ч.2 (динамические массивы, строки, структуры, классы)

Категория: Информатика

Нажмите, чтобы узнать подробности

Это 2-я часть сборника задач по программированию

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

Просмотр содержимого документа
«Задачи по программированию ч.2 (динамические массивы, строки, структуры, классы)»

Динамические массивы

задачи 0-4) переделать с помощью динамических массивов и функций

1) перевод 10-ичного числа в q-ичную систему счисл c пом массива предв найти его размерь

2)Реализовать циклический сдвиг массива на m –позиций вправо.

3)реализовать вставку элемента после k поз и удаление в к-поз

5) Даны 2 неубывающих массива. Построить 3й неубывающий массив, явл объединен 1х двух.

6*)Игра камни Играют двое Каждый обязан вынимать или камней .Проигрываеи тот, кто не сможет сделать ход. составить алгоритм и программу поиска выигрышных позиций при любых

4) Объясните разницу между 4 объектами (С++)

(a) int ival = 1024;(b) int *pi = &ival; (c) int *pi2 = new int(1024); (d) int *pi3 = new int[1024];

С) оп new выделяет память под безымянный объект типа int, инициализ его знач 1024 и возв адрес создан объекта. Этот адрес использ для инициализации указателя pint.

5)Что делает следующий фрагмент кода? В чем состоит логическая ошибка?

int *pi = new int(10); int *pia = new int[10];
while ( *pi pia[*pi] = *pi;

*pi = *pi + 1;
}

delete pi; delete[] pia;

Рекурсия

1) Написать рекурсивную функцию для вычислений

А)факториала натурального числа n. Б)количества цифр натурального числа.

В) цифрового корня натурального числа г) k-го члена последовательности Фибоначчи

Д) перевода натуральн числа из десятичной системы счисления в двоичную

Е) является ли заданное натуральное число простым

2) Определить результат выполнения следующих рекурсивных процедур при n=5

3) Задачи ЕГ на рекурсии

Дан рекурсивный алгоритм F Чему равна сумма всех чисел, которые будут выведены при выполнении вызова F(1).

Pascal

C++

procedure F(n: integer);

begin

writeln(n);

if n

F(n + 1);  F(n + 3)

  end

end;

void F(int n); {

cout

if (n

{F(n+1); F(n+3);}

}


А)  построение дерева вызовов

Б)подстановка

S(1) = 1 + S(2) + S(4) = S(2) + 5 S(2) = 2 + S(3) + S(5) = S(3) + 7

S(3) = 3 + S(4) + S(6) = 13 S(4) = 4  ответ: 25


Найти сумму чисел, выведенн при вызове F(1)

Ск символов * б напечатаны при вызове F(7)?

procedure F(n: integer);

begin

writeln(n);

if n

begin F(n+2); F(n*3) end

end;

procedure F(n: integer);

begin

writeln('*');

if n 0 then

begin F(n-2);F(n div 2) end

end;

4*) Дано натуральное число n1. Выведите все простые множители этого числа в порядке неубыв с учетом кратности. Алгоритм должен иметь сложность O(logn).

Массивы

Строки и символы

1)подсчет различных букв в слов

2) Перестановка букв в слове (циклический сдвиг вправо)

Перестановка букв в слове циклический сдвиг

подсчет различных букв в слов

ar s:string; i,j,n:integer;

begin

readln(s);

s:=s[length(s)] + copy(s,1,length(s)-1);

writeln(s);

end.

for i:=1 to length(s) do begin

n:=0;

for j:=1 to length(s) do begin

if s[i]=s[j] then inc(n);

end;

r:=r+1/n;

end;

Функция поиска заданного символа в строке

С++

Pascal

int find(char *s,char c)

{ int i;

for (i=0;i

if(s[I]==c) return i;

return –1;

}

find(c:char; s:string):integer;

var i:integer;

begin

for (i=1 to Length(s) -1 do

if (s[i]=c) then begin Result:=I; exit; end;

Result:=-1;

end;


количество слов в тексте

Выделение слов из текста

const Alpha : set of char=['A'..'Z','А'..'П','Р'..'Я','a'..'z','а'..'п','р'..'я'];

var s:string; i:integer; wc:integer;

begin

writeln('Вв текст'); readln(s);

i:=1; wc:=0;

Repeat

while NOT(s[i] in Alpha) and (i

if (i

while (s[i] in Alpha) and (i

Until (ilength(s));

writeln('Количество слов в этом тексте = ',wc);

end.

const Alpha : set of char=

['A'..'Z','А'..'П','Р'..'Я','a'..'z','а'..'п','р'..'я'];

var s,t:string;i:integer;

begin

writeln('Введите текст'); readln(s);

writeln('Список слов в тексте:');i:=1;

Repeat

while NOT(s[i] in Alpha) and (i

inc(i); t:='';

while [i] in Alpha) and (i

begin t:=t+s[i]; inc(i); end;

if length(t) 0 then writeln(t);

Until (i length(s));

end.


КОНЕЧНЫЕ АВТОМАТЫ И ОБРАБОТКА ТЕКСТОВ

1) В тексте возведение в степень обозначено 2 идущими подряд звёздочками. Решено заменить это обозн на ^ (так x**y заменится на x^y). Как это проще всего сделать? Исходный текст читается символ за символом, полученный текст требуется печатать символ за символом.

Наша программа заменяет *** на ^* (но не на *^).

2) Написать программу, кот удаляла бы комментарии и вставляла бы вместо исключенного комментария пробел (чтобы 1{один}2 превратилось не в 12, а в 1 2).

Структуры

Описать структуру с именем AEROFLOT, содержащую следующие поля:

название пункта назначения рейса; номер рейса; тип самолета.
2. Написать программу, вып следующие действия:
• ввод с клавиатуры данных в массив, состоящий из 7 структур типа AEROFLOT;
• упорядочивание записей по возрастанию номера рейса;
• вывод на экран ном рейсов и типов самолетов, вылет в п назнач, назв кот совпадает с названием, введенным с клавиатуры;
• если таких рейсов нет, вывести соответствуюшее сообщение.


Классы

1) Определить класс Children, кот содержит такие поля (члены класса): закрытые – имя ребенка, фамилию и возраст , публичные – методы ввода данных и отобр их на экран. Объявить 2 объекта класса, внести данные и показать их.

2) Создать класс, описывающий понятие работник, со свойствами:

фамилия; стаж; часовая заработная плата; количество отработанных часов.

C пом метода реализ ввод данных работн с клавиат Рассчитать с пом методов зарплату, за отраб время, и премию, размер кот определяется в з-ти от стажа (при стаже до 1 г 0%, до 3 л 5%, до 5 лет 8%, свыше 5 л 15%).
С пом метода печати, реализовать вывод информации о работнике на экран. Предусмотреть метод для записи в файл данных о работнике.


Стек

Пусть T некоторый тип. Рассм тип «стек элем типа T». Его знач явл посл-ти знач типа T.

Операции:

• Сделать пустым (var s: стек элементов типа T)

• Добавить (t:T; var s: стек элементов типа T)

• Взять (var t:T; var s: стек элементов типа T)

• Пуст (s: стек элементов типа T): boolean

• Вершина (s: стек элементов типа T): T

Процедура «Взять» применима, если посл-ть s непуста; она забирает из неё послед эл, кот стан знач переменной t.

Выр «Пуст(s)» истинно, если посл-ть s пуста. Выр «Вершина(s)» опред, если посл-ть s непуста, и равно последнему эл последовательности s

Реализация стека на основе массива

Pascal

С++

const N = ...

type

stack = record

| Содержание: array [1..N] of T;

| Длина: integer;

end;

#define NMAX 100
struct stack {

  float elem[NMAX];

 int top;
};

Инициализация стека


void init(struct stack *stk) {

 stk-top=0;
}

Помещение элемента в стек


void push(struct stack *stk, float f) {

  if(stk-top

    stk-elem[stk-top] = f;

    stk-top++;

  } else   printf("Стек полон, кол эл: %d !\n",stk-top);
}



1)Используя стек, напечатать символы нек строки в обратном порядке.

Каждый символ строки, начиная с 1го, размещаем в стеке. В результате на вершине стека окажется последний символ, “под” ним — предпоследний и т.д. Извлекая символы из стека, выводим их на экран в порядке, обратном исходному.

2) Дана линейная запись арифметического выражения, в котором использованы только круглые скобки. Проверить правильность расстановки скобок в выражении”