Abcde fghik abcde lmnop fghi
Выходные данные:
Abcde fghik lmnop fghi
Вариант 8
Задание 1
В заданной строке заменить все последовательности одинаковых символов длиной более двух на конструкцию (k)a, где k- количество повторений символа a.
Входные данные:
Abbcdddeeffffghh
Выходные данные:
Abbc(3)dee(4)fghh
Задание 2
В заданной строке найти первую и последнюю цифры. Отсортировать символы, стоящие между ними, по возрастанию. Рабочие строки не использовать.
Входные данные:
a*bc&9lsb345z%x
Выходные данные:
a*bc&9l34bs5z%x
Вариант 9
Задание 1
В заданной строке найти минимальное и максимальное целое число (числа могут быть отрицательными, в этом случае знак “минус” перед ними ставится без пробела). Предусмотреть случай, когда в строке чисел нет.
Входные данные:
a*bc&19-l sb3>4-5z%x
Выходные данные:
max=19
min=-5
Задание 2
В заданной строке найти подстроку, находящуюся между пробелами с заданными номерами. Рабочие строки не использовать. Предусмотреть случай, когда в строке таких пробелов нет.
Входные данные:
a*bc -&19 -l sb3> 4-5 z%x
Номер начального пробела:2
Номер конечного пробела:4
Выходные данные:
-l sb3>
Вариант 10
Задание 1
В заданной строке, состоящей из нескольких слов, разделенных пробелами, оставить по одному пробелу между словами. Предусмотреть случай, когда в строке пробелов нет.
Входные данные:
a*bc -&19 -l sb3> 4-5 z%x
Выходные данные:
a*bc -&19 -l sb3> 4-5 z%x
Задание 2
Вывести все 4-х символьные сочетания, состоящие из символов заданной строки, удовлетворяющие заданным правилам их формирования. Правила задать с терминала для каждого i-го символа (i=1,…,4):
Й символ – это буква или цифра?
Если буква, то гласная или согласная?
Если цифра, то четная или нечетная?
Й символ – это буква или цифра?
И так далее.
Ответы: 1 – да, 0 – нет.
Использованный символ строки далее в новые сочетания не входит.
Входные данные:
Ab1e2c03ik5
Й символ – буква:1
Гласная:1
Й символ – буква:0
Четная:1
Й символ – буква:1
Гласная:0
Й символ – буква:0
Четная:0
Выходные данные:
A2b1
E0c3
Вариант 11
Задание 1
Строка состоит из нескольких слов, разделенных пробелом. Определить минимальное количество первых символов слов, по которым можно различить слова в строке.
Входные данные:
Abc5 abc0 abcde abcfg
Выходные данные:
Задание 2
В заданной строке переставить слова по возрастанию их длины.
Входные данные:
a*bcd -&19 –l sb3> 4-5 z
Выходные данные:
z -1 4-5 -&19 sb3> a*bcd
Вариант 12
Задание 1
Строка состоит из натуральных чисел, разделенных пробелом, и диапазонов чисел (начальное число-тире-конечное число). Удалить из строки все числа, входящие в эти диапазоны. Оставшиеся числа вывести на экран по возрастанию (диапазоны не выводить).
Входные данные:
15 9 2 5 3-6 1 3 7-10
Выходные данные:
1 2 15
Задание 2
Удалить из строки все повторения символов. Рабочие строки не использовать.
Входные данные:
a*b*cd -dc&19a –1 sb3> 3-5 z
Выходные данные:
a*bcd -&19s3>5z
Вариант 13
Задание 1
Задана строка, в которой имеются цифры. Вывести на экран названия встретившихся цифр словами в порядке их следования.
Входные данные:
a*b0cd -dc&19a –1 sb3> 3-5 z
Выходные данные:
Ноль
Один
Девять
Один
Три
Три
Пять
Задание 2
Строка состоит из натуральных чисел, разделенных пробелом. Определить цифру, встречающуюся в этих числах наибольшее количество раз.
Входные данные:
512 256 32 1024 128 16
Выходные данные:
count=5
Вариант 14
Задание 1
Задана строка, в которой имеются наименования цифр. Вывести на экран эти цифры в порядке их следования.
Входные данные:
a*twob0fivecd -onedc&tnine19a –sixl sb3> 3-5 z
Выходные данные:
Задание 2
Строка состоит из натуральных чисел, разделенных пробелом. Определить цифры, не входящие ни в одно их этих чисел.
Входные данные:
512 256 32 1024 128 16
Выходные данные:
Вариант 15
Задание 1
Задана строка, представляющая собой уравнение с одним неизвестным в следующем формате:
ax+b=c
где a, b и с – целые числа, положительные или отрицательные. Определить значение неизвестного x.
Входные данные:
5x-3=7
Выходные данные:
x=2
Задание 2
Строка состоит только из букв. Переставить их так, чтобы гласные и согласные чередовались. Оставшиеся лишними гласные или согласные переместить в конец строки. Рабочие строки не использовать.
Входные данные:
Abcdefghiokl
Выходные данные:
Abecidofghkl
Лабораторная работа № 6
Массивы
Тема: Программирование алгоритмов работы с массивами.
Цель работы: Освоить основные алгоритмы работы с одномерными и многомерными массивами.Освоить методы тестирования программ.
Задание на лабораторную работу
- Получить задание в соответствии с номером своего варианта.
- Составить схему алгоритма решения задачи.
- Написать код программы на языке Паскаль в среде Borland Pascal for Windows.
- Осуществить компиляцию, и отладку программы. Провести структурное тестирование программы (тестирование как белого ящика): составить тестовые наборы для тестирования
- в нормальных условиях,
- при граничных условиях,
- при некорректных входных данных,
- по критерию покрытия решений – результат проверки каждого условия принимал значение истина или ложь хотя бы один раз,
- по критерию покрытия условий – все возможные результаты каждой логической операции в условиях были получены хотя бы по одному разу.
- Получить результат.
- Оформить отчет по лабораторной работе.
Пример оформления работы
Задание 1.
- Заполнить одномерный массив (вектор) vectorn целыми случайными числами в диапазоне от v_min до v_max. Найти в нем минимальный min и максимальный max элементы и поменять их местами. Размер вектора n задать константой. Границы диапазона v_min и v_max задать с консоли. Вывести на экран исходный вектор, найденные минимальный и максимальный элементы и их индексы, а также полученный вектор.
Для заполнения вектора целыми случайными числами в заданном диапазоне используется функция-генератор случайных чисел random(k), где k – целое число. Каждый раз при обращении к этой функции она будет вырабатывать целое число с равномерным распределением от 0 до k-1. Для сдвига диапазона случайных чисел в нужную сторону можно использовать следующее обращение к этой функции:
random(v_max – v_min + 1) + v_min.
Поиск максимального элемента вектора осуществляется следующим образом. Перед началом поиска за максимальный элемент вектора max принимается его первый элемент: max=vector1. Далее каждый следующий элемент вектора vectori, начиная со второго, сравнивается с максимальным элементом: если он больше максимального, то сейчас он – максимальный элемент вектора: max=vectori. Поиск минимального элемента осуществляется аналогично. В процессе поиска индексы максимального и минимального элементов (i_max, i_min) запоминаются.
После окончания поиска, найденные максимальный и минимальный элементы меняются местами.
- Схема алгоритма решения задачи:
- Код программы
3.1. На языке Паскаль:
Program Variant_0;
Uses WinCrt;
Const n = 10; {задание размера вектора именованной константой}
Var i, v_min, v_max, i_max, max, i_min, min : Integer;
vector : Array [1..n] Of Integer;
Begin
Randomize; {запуск генератора случайных чисел}
WriteLn('Лабораторная работа №6_1');
WriteLn('Вариант №0');
WriteLn('ИС-11-1');
WriteLn('Пупкин Василий');
WriteLn;
WriteLn('Задайте диапазон случайных чисел');
Write(‘v_min=’);
ReadLn(v_min);
Write(‘v_max=’);
ReadLn(v_max);
For i:=1 To n Do {заполнение вектора случайными числами}
vector[i]:=Random(v_max-v_min + 1) + v_min;
WriteLn;
WriteLn('Исходный вектор:');
For i:=1 To n Do {вывод на экран исходного вектора}
Write(vector[i]:5);
WriteLn;
max:= vector[1]; {пока макс элемент – первый элемент вектора}
i_max:= 1;
min:= vector[1]; {пока мин элемент – первый элемент вектора}
i_min:= 1;
For i:=2 To n Do {поиск начинаем со второго элемента}
Begin
If (vector[i] > max) Then {если очередной элемент больше} {текущего максимального}
Begin
max := vector[i]; {то максимальным элементом}
i_max := i; {становится очередной элемент} {вектора}
End;
If (vector[i] < min) Then {если очередной элемент меньше} {текущего минимального}
Begin
min := vector[i]; {то минимальным элементом}
i_min := i; {становится очередной элемент} {вектора}
End;
End;
WriteLn;
WriteLn(‘max=’, max, ‘ i_max=’, i_max);
WriteLn(‘min=’, min, ‘ i_min=’, i_min);
vector[i_max]:=min; {меняем местами макс и мин элементы}
vector[i_min]:=max; {в векторе}
WriteLn;
WriteLn('Полученный вектор:');
For i:=1 To n Do {вывод на экран полученного вектора}
Write(vector[i]:5);
WriteLn;
End.
3.2. На языке Си:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
Int main()
{
int i, n, m, vector_min, vector_max, min, max, i_min, i_max;
time_t t; // текущее время для инициализации
// генератора случайных чисел
srand((unsigned) time(&t)); // инициализация генератора
// случайных чисел
printf("\nЛабораторная работа №6_1");
printf("\nВариант №0");
printf("\nПО-11-1");
printf("\nПупкин Василий\n");
printf("\nВведите нижнюю границу диапазона:");
scanf("%d", &vector_min);
printf("\nВведите верхнюю границу диапазона:");
scanf("%d", &vector_max);
printf("\nВведите размер вектора:");
scanf("%d", &n);
int vector[n];
printf("\nИсходный вектор:\n");
m = vector_max-vector_min + 1;
for (i=0; i<n; i++)
{
// получение случайного числа в диапазоне
// от vector_min до vector_max
vector[i]=rand()% m + vector_min;
printf(" %5d", vector[i]);
}
printf("\n");
max = vector[0];
i_max = 0;
min = vector[0];
i_min = 0;
for (i=1; i<n ; i++)
{
if (vector[i] > max)
{
max = vector[i];
i_max = i;
}
if (vector[i] < min)
{
min = vector[i];
i_min = i;
}
}
printf("\nmax=%d i_max=%d", max, i_max);
printf("\nmin=%d i_min=%d\n", min, i_min);
vector[i_max] = min; //меняем местами max и min
vector[i_min] = max; //элементы вектора
printf("\nВыходной вектор:\n");
for (i=0; i<n; i++)
printf(" %5d", vector[i]);
printf("\n");
return 0;
}
3.3. На языке Java:
package javaapplication6_1;
// Импорт библиотеки графических компонентов Swing
import javax.swing.*;
import java.util.*;
public class JavaApplication6_1 // задание нового класса
{
// описание главного метода main этого класса
public static void main(String[] args)
{
//описание переменных:
// целого типа
int n, vector_min, vector_max, min, max, i_min, i_max; String input, text; // строк класса String
//консольный вывод
System.out.println("Лабораторная работа №6-1");
System.out.println("Вариант №0");
System.out.println("ПО-11-1");
System.out.println("Пупкин Василий");
System.out.println();
// вызов диалогового окна ввода исходных данных
input=JOptionPane.showInputDialog("Нижняя граница диапазона vector_min:");
// преобразование из строкового значения в целое
vector_min=Integer.parseInt(input);
input=JOptionPane.showInputDialog("Верхняя граница диапазона vector_max:");
vector_max=Integer.parseInt(input);
input=JOptionPane.showInputDialog("Размер вектора n:");
n=Integer.parseInt(input);
// формирование строки вывода
text="Значения входных переменных:\nvector_min=" + vector_min + "\nvector_max=" + vector_max + "\nn=" + n;
// вызов диалогового окна эхо-печати
JOptionPane.showMessageDialog(null, text);
//консольный вывод
System.out.printf("vector_min=%d\nvector_max=%d\nn=%d\n",
vector_min, vector_max, n);
// создание вектора длиной n элементов
int vector[]=new int[n];
//консольный вывод
System.out.println();
System.out.println("Исходный вектор:");
// создание объекта Rand класса Random - генератора случ. чисел
// инициализация генератора случайных чисел,
// привязка его к системному времени
Random Rand=new Random();
// формирование вектора случайным образом
for (int i=0; i<n; i++)
{
// получение очередного случайного числа в диапазоне
// от vector_min до vector_max
vector[i]=Rand.nextInt(vector_max-vector_min+1) + vector_min;
//консольный вывод элемента вектора
System.out.printf(" %5d", vector[i]);
}
//консольный вывод
System.out.println();
// вычисления по заданному алгоритму
// максимальное и минимальное значения-
// начальные элементы вектора
max = vector[0];
i_max = 0;
min = vector[0];
i_min = 0;
// поиск минимального и максимального элементов вектора
// и их индексов
for (int i=1; i<n ; i++)
{
if (vector[i] > max)
{
max = vector[i];
i_max = i;
}
if (vector[i] < min)
{
min = vector[i];
i_min = i;
}
}
//консольный вывод
System.out.printf("\nmax=%d i_max=%d", max, i_max);
System.out.printf("\nmin=%d i_min=%d\n", min, i_min);
//меняем местами max и min элементы вектора
vector[i_max] = min;
vector[i_min] = max;
//консольный вывод вектора
System.out.println();
System.out.println("Выходной вектор:");
for (int i=0; i<n; i++)
System.out.printf("%5d", vector[i]);
System.out.println();
}
}
3.4. На языке PHP:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>
Лабораторная работа №6_1
</title>
</head>
<body BgColor="silver" text="blue">
<H2>Лабораторная работа №6_1</h2>
<H3>Массивы</h3>
Вариант №0
<br>ПО-11-1
<br>Пупкин Василий
<br>
<br>
<Form name="LabRab_6_1" action="" method="POST">
Нижняя граница диапазона vector_min:<br>
<input type="text" name="vector_min" size="5"><br>
Верхняя граница диапазона vector_max:<br>
<input type="text" name="vector_max" size="5"><br>
Размер вектора n:<br>
<input type="text" name="n" size="5"><br>
<input type="submit" value="Вычислить"><br>
</form>
<?php
// получение значения переменной из формы
$vector_min=$_POST['vector_min'];
$vector_max=$_POST['vector_max'];
$n=$_POST['n'];
if (($n!='') && ($vector_min!='') && ($vector_max!=''))
{
//эхо-печать
echo "<br>n=$n";
echo "<br>vector_min=$vector_min";
echo "<br>vector_max=$vector_max<br>";
// инициализация генератора случайных чисел
mt_srand(time());
// заполнение вектора целыми случайными числами
// от vector_min до vector_max
for ($i=0; $i<$n; $i++)
$vector[$i]=mt_rand($vector_min, $vector_max);
// вывод исходного вектора на экран
echo '<br>Исходный вектор:<br>';
foreach($vector as $index=>$value)
{
echo "$index=>$value";
echo '<br>';
}
// определяем минимальный и максимальный
// элементы вектора
// пока это начальный элемент массива
$max = $vector[0];
$i_max = 0;
$min = $vector[0];
$i_min = 0;
for ($i=1; $i<$n ; $i++)
{
if ($vector[$i] > $max)
{
$max = $vector[$i];
$i_max = $i;
}
if ($vector[$i] < $min)
{
$min = $vector[$i];
$i_min = $i;
}
}
// вывод найденных элементов
// и их индексов на экран
echo "<br>i_max=$i_max max=$max";
echo "<br>i_min=$i_min min=$min";
echo '<br>';
//меняем местами max и min
//элементы вектора
$vector[$i_max] = $min;
$vector[$i_min] = $max;
// вывод выходного вектора на экран
echo '<br>Выходной вектор:<br>';
foreach($vector as $index=>$value)
{
echo "$index=>$value";
echo '<br>';
}
echo '<br>';
}
?>
</body>
</html>
- Компиляция, отладка, тестирование и получение результата:
Задание 2.
1. Заполнить квадратный массив massivnn целыми случайными числами в диапазоне от v_min до v_max. Поменять местами главную и побочную диагонали массива. Размер массива n задать константой. Границы диапазона v_min и v_max задать с консоли. Вывести на экран исходный и полученный массивы.
Элементы главной диагонали квадратного массива имеют одинаковые индексы: massivii (i=1…n). Соответствующие им построчно элементы побочной диагонали имеют индексы massivi,n-i+1 .Меняем их местами алгоритмом циклического обмена через третью переменную.
2. Схема алгоритма решения задачи:
3. Код программы
3.1. На языке Паскаль:
Program Variant_0;
Uses WinCrt;
Const n = 5; {задание размера массива именованной константой}
Var i, j : Word;
k, v_min, v_max: Integer;
massiv : Array [1..n, 1..n] Of Integer;
Begin
Randomize; {запуск генератора случайных чисел}
WriteLn('Лабораторная работа №6_2');
WriteLn('Вариант №0');
WriteLn('ИС-11-1');
WriteLn('Пупкин Василий');
WriteLn;
WriteLn('Задайте диапазон случайных чисел');
Write(‘v_min=’);
ReadLn(v_min);
Write(‘v_max=’);
ReadLn(v_max);
For i:=1 To n Do {заполнение массива случайными числами}
For j:=1 To n Do
massiv[i,j]:=Random(v_max-v_min + 1) + v_min;
WriteLn;
WriteLn('Исходный массив:');
For i:=1 To n Do {вывод на экран исходного массива}
Begin
For j:=1 To n Do
Write(massiv[i,j]:5);
WriteLn;
End;
WriteLn;
For i:=1 To n Do {меняем местами соответствующие элементы}
Begin {главной и побочной диагоналей}
k:=massiv[i,i];
massiv[i,i]:=massiv[i,n-i+1];
massiv[i,n-i+1]:=k;
End;
WriteLn;
WriteLn('Полученный массив:');
For i:=1 To n Do {вывод на экран полученного массива}
Begin
For j:=1 To n Do
Write(massiv[i,j]:5);
WriteLn;
End;
WriteLn;
End.
3.2. На языке Си:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
Int main()
{
int i, j, n, m, massiv_min, massiv_max, temp;
time_t t; // текущее время для инициализации
// генератора случайных чисел
srand((unsigned) time(&t)); // инициализация генератора
// случайных чисел
printf("\nЛабораторная работа №6_2");
printf("\nВариант №0");
printf("\nПО-11-1");
printf("\nПупкин Василий\n");
printf("\nВведите нижнюю границу диапазона:");
scanf("%d", &massiv_min);
printf("\nВведите верхнюю границу диапазона:");
scanf("%d", &massiv_max);
printf("\nВведите размер массива:");
scanf("%d", &n);
int massiv[n][n];
printf("\nИсходный массив:\n");
m = massiv_max-massiv_min + 1;
for (i=0; i<n; i++)
{
// получение случайного числа в диапазоне
// от vector_min до vector_max
for (j=0; j<n; j++)
{
massiv[i][j]=rand()% m + massiv_min;
printf("%5d", massiv[i][j]);
}
printf("\n");
}
printf("\n");
for (i=0; i<n ; i++) //меняем местами соответствующие элементы
{ //главной и побочной диагоналей
temp = massiv[i][i];
massiv[i][i] = massiv[i][n-i-1];
massiv[i][n-i-1] = temp;
}
printf("\nВыходной массив:\n");
for (i=0; i<n; i++)
{
for (j=0; j<n; j++)
printf("%5d", massiv[i][j]);
printf("\n");
}
printf("\n");
return 0;
}
3.3. На языке Java:
package javaapplication6_2;
// Импорт библиотеки графических компонентов Swing
import javax.swing.*;
import java.util.*;
public class JavaApplication6_2 // задание нового класса
{
// описание главного метода main этого класса
public static void main(String[] args)
{
//описание переменных
int n, massiv_min, massiv_max, temp; // целого типа