Навигация по странице:
|
программирование_занятие_6. Решение задач на обработку чисел и строк
«Решение задач на обработку чисел и строк».
Структурированные типы данных. Cтрока
|
1 Определение. Строковый (литерный). Базовый.
2 Способы представления (хранения).
BASIC PASCAL
<�им.пер.>$ <�им.пер.>:string[12];
BASIC Использование специальной области памяти, размер которой (по умолчанию 200 байт) может быть изменен оператором clear .
PASCAL Задается как одномерный массив знаков (см. ТД "массив").
В нулевом элементе массива хранится фактическая длина строки.
* Как исключение, ввод и вывод происходит как с базовыми элементами.
3 Основные операции.
BASIC PASCAL
конкатенация (слияние) =a$+b$ =concat(a,b,...)
выделение подстроки слева =left$(a$,x)
выделение подстроки справа =right$(a$,x)
выделение подстроки =mid$(a$,m,x) =copy(a,m,x)
замена части строки внутри строки mid$(a$,m,x)=
вставка строки внутрь строки insert(q,z,p)
удаление части строки delete(s,p,n)
4 Связь с данными других типов.
BASIC PASCAL
определение длины строки =len(a$) =lenth(a)
поиск подстроки в строке =instr(a$,b$) =pos(b,a)
представление чисел строкой цифр =str$(x) str(v:d:s,z);
{ =bin$(x) =oct$(x) =hex$(x) }
превращение строки цифр в число =val(a$) val(s,v,c)
-----------------------------------------------------------------------
2004
A09
|
программы
|
Определите значение целочисленных переменных x, y и t после выполнения фрагмента программы:
Бейсик
|
Паскаль
|
Алгоритмический
|
x=5
y=7
t=x
' MOD - стандартная операция, вычисляющая
остаток от деления нацело первого аргумента на второй `
x= y MOD x
y=t
|
x:=5;
y:=7;
t:=x;
x:= y mod x; {mod - стандартная операция, вычисляющая остаток от деления нацело первого аргумента на
второй}
y:=t;
|
x:=5;
y:=7;
t:=x;
x:=mod (y,x); | mod - стандартная функция, вычисляющая остаток от деления нацело первого аргумента на второй|
y:=t;
|
1)
|
x=2, y=5, t=5
|
2)
|
x=7, y=5, t=5
|
3)
|
x=2, y=2, t=2
|
4)
|
x=5, y=5, t=5
|
|
1
|
|
|
2005
А07
|
программа
|
Определите значение целочисленных переменных a и b после выполнения фрагмента программы (ниже представлена одна и та же программа, записанная на разных языках программирования):
Бейсик
|
Паскаль
|
Алгоритмический
|
a=42
b=14
a=a\b
b=a*b
a=b\a
\ — стандартная операция, вычисляющая
результат деления нацело первого аргумента на второй
|
a:=42;
b:=14;
a:=a div b;
b:=a*b;
a:=b div a; {div —
стандартная операция, вычисляющая результат деления нацело первого аргумента на второй}
|
a:=42
b:=14
a:= div(a, b)
b:= a*b
a:= div(b, a) | div —
стандартная функция, вычисляющая результат деления нацело первого аргумента на второй|
|
1)
|
a = 42, b = 14
|
2)
|
a = 1, b = 42
|
3)
|
a = 0, b = 588
|
4)
|
a = 14, b = 42
|
|
|
|
2004
С05
|
прогр
|
Во входном файле text.dat содержится текст на английском языке, заканчивающийся точкой (другие символы “.” в этом файле отсутствуют). Требуется написать программу на языке Паскаль или Бейсик, которая будет определять и выводить на экран английскую букву, встречающуюся в этом тексте чаще всего, и количество там таких букв. Строчные и прописные буквы при этом считаются не различимыми. Если искомых букв несколько, то программа должна выводить на экран первую из них по алфавиту. Например, пусть файл содержит следующую запись: It is not a simple task. Yes! Чаще всего здесь встречаются буквы I, S и T (слово Yes в подсчете не учитывается, так как расположено после точки). Следовательно, в данном случае программа должна вывести два символа, разделенных пробелом: I 3
|
|
|
|
2009
А05
|
программа
|
Определите значение переменной c после выполнения следующего фрагмента программы.
Бейсик
|
Паскаль
|
Алгоритмический
|
a = 5
a = a + 6
b = – a
c = a – 2 * b
|
a:=5;
a:=a+6;
b:= –a;
c:=a–2*b;
|
a:=5
a:=a+6
b:= –a
c:=a–2*b
|
1)
|
c = –11
|
2)
|
c = 15
|
3)
|
c = 27
|
4)
|
c = 33
|
|
4
|
|
|
2009
B02
|
Программа
|
Запишите значение переменной b после выполнения фрагмента алгоритма:
Примечание: знаком := обозначена операция присваивания.
знаком * обозначена операция умножения.
|
511
|
|
|
2009
С01
|
программа
|
Требовалось написать программу, которая вводит с клавиатуры координаты точки на плоскости (x,y – действительные числа) и определяет принадлежность точки заштрихованной области, включая ее границы. Программист торопился и написал программу неправильно.
ПРОГРАММА
НА ПАСКАЛЕ
|
ПРОГРАММА
НА БЕЙСИКЕ
|
ПРОГРАММА
НА СИ
|
var x,y: real;
begin
readln(x,y);
if y<=1 then
if x>=0 then
if y>=sin(x) then
write('принадлежит')
else
write('не принадлежит')
end.
|
INPUT x, y
IF y<=1 THEN
IF x>=0 THEN
IF y>=SIN(x) THEN
PRINT "принадлежит"
ELSE
PRINT "не принадлежит"
ENDIF
ENDIF
ENDIF
END
|
void main(void)
{ float x,y;
scanf("%f%f",&x,&y);
if (y<=1)
if (x>=0)
if (y>=sin(x))
printf("принадлежит");
else
printf("не принадлежит");
}
|
Последовательно выполните следующее:
1) Приведите пример таких чисел x, y, при которых программа неверно решает поставленную задачу.
2) Укажите, как нужно доработать программу, чтобы не было случаев ее неправильной работы. (Это можно сделать несколькими способами, поэтому можно указать любой способ доработки исходной программы.)
|
|
|
|
2005
С03
|
|
|
|
|
|
2009
С02
|
программа
|
Опишите на русском языке или одном из языков программирования алгоритм получения из заданного целочисленного массива размером 30 элементов другого массива, который будет содержать модули значений элементов первого массива (не используя специальной функции, вычисляющей модуль числа).
|
|
|
|
|
|
|