МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Московский государственный институт электроники и математики (технический университет)
Кафедра «Вычислительная техника»
ОТЧЕТ
о домашней работе
Вариант: 22
Исполнитель:
студент группы С-31
Москва – 2009г.
Постановка задачи.
Программа 1:
Даны два целочисленных массива. Определить, можно ли в первом из них выбрать такие к идущих подряд элементов, что бы x[j] = y[1], x[j+1] = y[2] ... x[j + k - 1] = y[k]
Программа 2:
Найти наибольший и наименьший элементы прямоугольной матрицы и поменять их местами
Программа 3:
Из заданного числа вычли сумму его цифр. Из результата вновь вычли сумму его цифр и т.д. Через сколько таких действий получится нуль?
Программа 4:
Дана строка, содержащая текст на русском языке. Подсчитать количество слов, начинающихся и заканчивающихся на одну и ту же букву.
Программа 1.
1. 1. Исходный код
cout <<"Dany dva celochislennyh massiva:Opredelit mojno li v pervom iz nih vybrat takie K iduschih podryad elementovb chto by x[j]=y[1],x[j+1]=y[2]...x[j+k-1]=y[k]"<< endl;
int x[100];
int y[100];
int nx,ny;
int i,k,j,m;
int rez;
char lett;
cout << "Razmer massiva X: ";
cin >> nx;
cout << "Razmer massiva Y: ";
cin >> ny;
cout << endl;
for (i = 0; i < nx; i++) {
cout << "x[" << i + 1 << "] = ";
cin >> x[i];
}
cout << endl;
for (i = 0; i < ny; i++) {
cout << "y[" << i + 1 << "] = ";
cin >> y[i];
}
cout << endl << "k = ";
cin >> k;
rez = 0; //rezultat
if((k <= nx)&&(k <= ny)){
j = 0;
while((rez == 0)&&(j <= (nx-k))){
rez = 1;
for(m = 0; m < k; m++){
if(x[j+m] != y[m]) rez = 0;
}
j++;
}
}
if(rez == 0){
cout << endl << "Nel'zja!" << endl;
}
else{
cout << endl << "Mozhno!" << endl;
}
-
2. Схема алгоритма кода программы.



-
3. Внешняя спецификация

Программа 2 (Ввод из файла, сохранение результата в файл).
2. 1. Исходный код.
cout << "Nayti naibolshiy i naimen'shiy elementy pryamougol'noy matricy i pomenyat' ih mestami" << endl;
int x[100][100];
int n,m;
int i,j;
int i_min,j_min,x_min;
int i_max,j_max,x_max;
int tmp;
FILE *fl;
if ((fl = fopen("data1.txt", "rt"))
== NULL)
{ fprintf(stderr, "Ne mogu otkrit.\n");
}
cout << "Chtenie proizvoditsya iz faila data1" << endl;
n=4;
m=4;
char s[5],d[100],buf[50];
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
{
fgets(s,5,fl);
x[i][j]=atoi(s);
}
}
//poisk minimuma i maksimuma
x_min = x[0][0];
i_min = 0;
j_min = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if(x_min > x[i][j]){
x_min = x[i][j];
i_min = i;
j_min = j;
}
}
}
x_max = x[0][0];
i_max = 0;
j_max = 0;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
if(x_max < x[i][j]){
x_max = x[i][j];
i_max = i;
j_max = j;
}
}
}
//vyvod
cout << endl << "Input:" << endl;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
cout << x[i][j] << "\t";
}
cout << endl;
}
//menjaem mestami
tmp = x[i_min][j_min];
x[i_min][j_min] = x[i_max][j_max];
x[i_max][j_max] = tmp;
//vyvod
cout << endl << "Rezult:" << endl;
for (i = 0; i < m; i++) {
for (j = 0; j < n; j++) {
cout << x[i][j] << "\t";
}
cout << endl;
}
cout << "Vvedite imya faila:" << endl;
cin >> d;
FILE *file;
char* file_name = d;
char load_string[100] = "none";
file = fopen( file_name, "a" );
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
sprintf(buf," %d",x[i][j]);
fputs(buf, file );
}
fputs("\n", file );
}
fclose( file );
-
2. Схема алгоритма кода программы.




-
3. Внешняя спецификация

Программа 3 (методом случайной генерации).
3. 1. Исходный код.
int x;
int k;
cout << "Iz zadannogo chisla vychli summu ego cifr. Iz rezul'tata vnov' vychli summu ego cifr i t.d. Cherez skol'ko takih deystviy poluchitsya nul'?" << endl;
x=(rand() % 100);
cout << "X = "<<x<<endl;
k = 0;
while(x > 0){
x -= summ(x);
k++;
}
cout << endl << "k = " << k << endl;
}
3. 2. Схема алгоритма кода программы.

-
3. Внешняя спецификация

Программа 4.
4. 1. Исходный код.
cout << "Dana stroka, soderjaschaya tekst na russkom yazyke.Podschitat' kolichestvo slov,nachinayuschihsya i zakanchivayuschihsya na odnu i tu je bukvu." << endl;
int n,k,j;
int s_l,s_r,i;
char str[255];
cout << "Vvedite stroku:" << endl;
gets(str);
n = strlen(str);
cout << endl;
s_l = 0;
k = 0;
do{
i = s_l;
while((i<n)&&(str[i]!=' ')){
i++;
}
s_r = i;
if(str[s_l]==str[s_r - 1]){
k++;
}
s_l = s_r + 1;
} while(s_r < n);
cout << "k = " << k << endl;
4. 2. Схема алгоритма кода программы.


-
3. Внешняя спецификация

