Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Программирование на языке высокого уровня. Методические указания и варианты заданий для студентов 1-го курса направления подготовки 09.03.01 Информати
.pdf
ВАРИАНТЫ ЗАДАНИЯ № 4-Б
1. s=(Ap+q,q)
2. s=(Aq+p,Aq)
3. s=(B(p-r),r)
4. s=(ABr+p,Br)
5. s=(Aq-Bp,r)
6. s=(AAp,q)
7. s=(Aq+AAq,q)
8. s=(r+BBr,p)
9. s=(A(p-q),B(p-q))
10. s=(r,A(r-q))
11. s=(q,Aq+Bp)
12. s=(r+ABr,q)
13. s=(q-ABq,q)
14. s=(A(p+r+q),p)
15. s=(B(r-q),p)
16. s=(A(q-p),p)
17. s=(B(q-p-r),q)
18. s=(ABp-r,q)
19. s=(Ar-Bq,p)
20. s=(Ap,B(r-p))
21. s=(B(p-q),r)
22. s=(AAp+q,p)
23. s=(Br-Ap,q-p)
24. s=(Ar+p,p+q)
25. s=(B(r-q),p-r)
26. s=(Bq-Ar,Ar)
27. s=(B(r+q+r),AAp)
28. s=(A(p+q+r),AAr)
29. s=(B(r-p),BBr)
30. s=(BBr,Aq)
31. s=(Ap,B(q+r))
A B p q r
1 2 3
1 2 1
3 2 0
4 1 2
0 4 3
1 1 1
01
17
15
16
0 8
11
0 7
13
0 2
.
.
.
.
.
.
.
.
.
Вычислить скалярное произведение s.
Исходные данные.
Примечание. При вычислении выражения вида y=ABx рекоменду-
ется последовательно вычислить z=Bx, y=Az, что в общем случае приводит к существенному уменьшению количества арифметических операций (по сравнению с умножением матриц C=AB).
#include <stdio.h>
#include <conio.h>
#include <alloc.h> /* <malloc.h> для C++ */
ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ
s=(Ar-Bq,p)
31

void Umnmv(int n, int m, float **a, float *x,
float *y)
{
int i,j;
for (i=0;i<n;i++)
{
y[i]=0;
for (j=0;j<m;j++)
y[i]+=a[i][j]*x[j];
}
return;
}
void Linv(int n, float alpha, float*x,
float beta, float*y, float*z)
{
int i;
for (i=0;i<n;i++)
z[i]=alpha*x[i]+beta*y[i];
return;
}
float Scal(int n, float*x, float*y)
{
int i;
float s=0;
for (i=0;i<n;i++)
s+=x[i]*y[i];
return s;
}
32

main()
{
int i,j,n=3;
float **a,**b,*p,*q,*r,*x,*y,*z;
FILE *in;
clrscr();
if((in=fopen("Linalg.dat ","r"))==NULL)
{
printf("\nФайл Linalg.dat не открыт !");
getch(); exit(1);
}
fscanf(in,"%d",&n);
a=(float**)malloc(n*sizeof(float*));
b=(float**)malloc(n*sizeof(float*));
p=(float*)malloc(n*sizeof(float));
q=(float*)malloc(n*sizeof(float));
r=(float*)malloc(n*sizeof(float));
x=(float*)malloc(n*sizeof(float));
y=(float*)malloc(n*sizeof(float));
z=(float*)malloc(n*sizeof(float));
for(i=0;i<n;i++)
{
a[i]=(float*)malloc(n*sizeof(float));
b[i]=(float*)malloc(n*sizeof(float));
}
for(i=0;i<n;i++)
for(j=0;j<n;j++)
fscanf(in,"%f",&a[i][j]);
for(i=0;i<n;i++)
for(j=0;j<n;j++)
fscanf(in,"%f",&b[i][j]);
for(i=0;i<n;i++)
fscanf(in,"%f",&p[i]);
33

for(i=0;i<n;i++)
fscanf(in,"%f",&q[i]);
for(i=0;i<n;i++)
fscanf(in,"%f",&r[i]);
printf("\nМатрица A:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5.1f",a[i][j]);
printf("\n");
}
printf("\nМатрица B:\n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%5.1f",b[i][j]);
printf("\n");
}
printf("\nВектор P:\n");
for(i=0;i<n;i++)
printf("%5.1f",p[i]);
printf("\nВектор Q:\n");
for(i=0;i<n;i++)
printf("%5.1f",q[i]);
printf("\nВектор R:\n");
for(i=0;i<n;i++)
printf("%5.1f",r[i]);
Umnmv(n,n,a,r,x);
Umnmv(n,n,b,q,y);
Linv(n,1,x,-1,y,z);
printf("\nОтвет S=%1.2f\n",Scal(n,z,p));
getch();
}
34

LINALG.DAT
==========
3
1 2 3
1 2 1
3 2 0
4 1 2
0 4 3
1 1 1
0.1 1.7 -1.5
-1.6 0.8 1.1
-0.7 1.3 0.2
==========
Ответ S=-7.19
35

ВАРИАНТЫ ЗАДАНИЯ № 5
1. В файле хранится список участников соревнования в виде: Фамилия/Год_рождения (например, Иванов/1985). Кто из них самый молодой?
2. В файле хранится список участников соревнования в виде: Фамилия/Год_рождения (например, Иванов/1985). Кто из них самый
старший?
3. В файле хранится список участников соревнования в виде: ФАМИЛИЯ/Страна (например, ИВАНОВ/Россия, ФАМИЛИЯ — в верхнем регистре). Количество записей не ограничено. Найти все фамилии
из данной страны, которые представляют собой слово-палиндром (т.е.
читаются одинаково в прямом и обратном направлении).
4. В файле хранится список участников экзамена в виде: Фамилия(факультет) (например, Иванов(ИСТАС)). Количество записей не
ограничено. Найти все фамилии с данного факультета, которые представляют собой слово-палиндром.
5. Дана символьная строка, в которой слова перечислены через
точку с запятой, а общая длина 80. Найти самое длинное слово в
предложении.
6. Дана символьная строка, в которой слова перечислены через
точку с запятой, а общая длина 80. Найти самое короткое слово в
предложении.
7. Дана символьная строка, в которой слова перечислены через
точку с запятой, а общая длина 80. Найти и напечатать все слова, которые начинаются и оканчиваются на одинаковую букву.
8. Дана символьная строка, в которой слова перечислены через
точку с запятой, а общая длина 80. Найти и напечатать все слова, которые представляют собой слово-палиндром.
9. Дана символьная строка, в которой слова перечислены через
точку с запятой, а общая длина 80. Найти и напечатать все слова, которые начинаются на заданную букву.
10. Дана символьная строка, в которой слова перечислены через
точку с запятой, а общая длина 80. Найти и напечатать все слова, которые оканчиваются на заданную букву.
36

11. Дана символьная строка, в которой слова перечислены через
точку с запятой, а общая длина 80. Найти и напечатать все слова, которые содержат в себе заданную букву.
12. Дана символьная строка, в которой слова перечислены через
точку с запятой, а общая длина 80. Распечатать все слова в столбик —
по одному слову на каждой строчке.
13. Дано предложение, в котором слова разделены запятой или пробелом, а общая длина 80. Найти самое длинное слово в предложении.
14. Дано предложение, в котором слова разделены запятой или пробелом, а общая длина 80. Найти самое короткое слово в предложении.
15. Дано предложение, в котором слова разделены запятой или
пробелом, а общая длина 80. Найти и напечатать все слова, которые
начинаются и оканчиваются на одинаковую букву.
16. Дано предложение, в котором слова разделены запятой или
пробелом, а общая длина 80. Найти и напечатать все слова, которые
представляют собой слово-палиндром.
17. Дано предложение, в котором слова разделены запятой или
пробелом, а общая длина 80. Найти и напечатать все слова, которые
начинаются на заданную букву.
18. Дано предложение, в котором слова разделены запятой или
пробелом, а общая длина 80. Найти и напечатать все слова, которые
оканчиваются на заданную букву.
19. Дано предложение, в котором слова разделены запятой или
пробелом, а общая длина 80. Найти и напечатать все слова, которые
содержат в себе заданную букву.
20. Дано предложение, в котором слова разделены запятой или
пробелом, а общая длина 80. Распечатать все слова в столбик — по
одному слову на каждой строчке.
21. В файле хранится список поездов в виде: Пункт_отправления—
Пункт_назначения (например, Москва—Сочи). Количество записей не
ограничено. Определить, сколько поездов идут до заданного пункта.Вывести их на экран.
22. В файле хранится список поездов в виде: Пункт_отправления—
Пункт_назначения (например, Москва—Сочи). Количество записей не
ограничено. Определить, сколько поездов идут от заданного пункта.
Вывести их на экран.
37

23. В файле хранится список поездов в виде: Пункт_отправления—
Пункт_назначения(например, Москва—Сочи). Количество записей не
ограничено. Вывести на экран все пункты назначения, которые соответствуют заданному пункту отправления.
24. В файле хранится список поездов в виде: Пункт_отправления—
Пункт_назначения (например, Москва—Сочи). Количество записей не
ограничено. Вывести на экран все пункты отправления, которые соответствуют заданному пункту назначения.
25. В файле хранится список участников соревнования в виде: Фамилия/Страна (например, Иванов/Россия). Количество записей не ограничено. Сколько человек представляют данную страну? Вывести их
фамилии на экран.
26. В файле хранится список участников экзамена в виде: Фамилия(факультет) (например, Иванов(ИСТАС)). Количество записей не
ограничено. Сколько человек представляют данный факультет? Вывести их фамилии на экран.
27. В файле хранится список участников соревнования в виде: Фамилия/Страна (например, Иванов/Россия). Количество записей не ограничено. Найти самую длинную фамилию из данной страны.
28. В файле хранится список участников экзамена в виде: Фамилия(факультет) (например, Иванов(ИСТАС)). Количество записей не
ограничено. Найти самую длинную фамилию на данном факультете.
29. В файле хранится список участников соревнования в виде: Фамилия/Страна (например, Иванов/Россия). Количество записей не ограничено. Найти самую короткую фамилию из данной страны.
30. В файле хранится список участников экзамена в виде: Фамилия(факультет) (например, Иванов(ИСТАС)). Количество записей не
ограничено. Найти самую короткую фамилию на данном факультете.
31. В файле хранится список участников соревнования в виде:
ФАМИЛИЯ/Страна (например, ИВАНОВ/Россия, ФАМИЛИЯ— в
верхнем регистре). Количество записей не ограничено. Найти все фамилии из данной страны, которые начинаются и оканчиваются на одинаковую букву.
32. В файле хранится список участников экзамена в виде: ФАМИЛИЯ(факультет) (например, ИВАНОВ(ИСТАС), ФАМИЛИЯ— в верхнем регистре). Количество записей не ограничено. Найти все фамилии,
которые начинаются и оканчиваются на одинаковую букву.
38

ПРИМЕР ВЫПОЛНЕНИЯ ЗАДАНИЯ
Примечание для MSVC-2008
Для корректного ввода русского текста с клавиатуры рекомендуется
применять следующий прием!
Пример 1: Выбрать из файла слова, которые начинаются и оканчива-
ются на одинаковую букву. Найти их количество.
#include <stdio.h>
#include <conio.h>
#include <string.h>
int test(char* s)
{
int n=0,i;
n=strlen(s)-1;
if(s[0]==s[n]) return 1;
return 0;
}
main()
{
FILE *in;
char s[80];
int k=0;
clrscr();
in=fopen("str.dat","r");
while(fscanf(in,"%s",s)!=EOF)
if(test(s))
{
printf(s); printf("\n");
k++;
}
printf("\n k=%d",k); getch(); fclose(in);
}
Пример 2: Разобрать строку-предложение на отдельные слова.
39

#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <clocale>
#include <windows.h>
using namespace std;
int main()
{
char s[80];
setlocale(LC_CTYPE,"Russian");
printf("введите S\n");
SetConsoleCP(1251);
/*Установить страницу кодировкиWindows (рус)*/
gets(s);
SetConsoleCP(866);
/* Установить страницу кодировкиMS-DOS (рус)*/
printf(s);
_getch();
}
Если нужно узнать, какая страница кодировки является в данный
момент активной, применяйте функцию
GetConsoleCP()
#include <stdio.h>
#include <conio.h>
#include <string.h>
main()
{
char s[80];
char Znak[]=" ,.()";
char *Temp;
clrscr();
printf("Введите предложение:");
gets(s);
Temp=strtok(s,Znak);
40
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
