Решение задач
|
|
Admin | Дата: Пятница, 11.06.2010, 21:01 | Сообщение # 1 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Пишем сюда свои задачи как на С так и на Паскале
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:23 | Сообщение # 2 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Вычеслить суму положительных елементов каждой строки для матриц А(10,12) и B(15,10). Используя подпрограмму функций. Code uses crt; type mas=array[1..6,1..6] of integer; matr=array[1..6,1..6] of integer; procedure Vvod(var mt:matr;x:byte;c:char); var i,j:byte; begin writeln('Iao?eoa ',c); for i:=1 to 6 do begin for j:=1 to 6 do begin mt[i,j]:=random(20)-5; write(mt[i,j]:5); end; writeln; end; end; function Summ(v:mas;x:byte):integer; var i,j:integer; s:integer; begin s:=0; for i:=1 to 6 do for j:=1 to 6 do
if v[i,j]>0 then s:=s+v[i,j]; Summ:=s; end; procedure Vektor(mt:mas;x:real;var v:mas;c:string); var i,j:byte; begin writeln('Aaeoi? ',c); for i:=1 to 6 do begin v[i,j]:=Summ(mt,6); write(v[i,j],' '); end; writeln; writeln; end; var a,b:matr; va,vb:mas; begin clrscr; randomize; Vvod(a,6,'A'); Vektor(a,6,va,'Va'); Vvod(b,5,'B'); Vektor(b,5,vb,'Vb'); readln end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:23 | Сообщение # 3 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Сформировать матрицу по образцу: 1 1 1 1 1 0 1 1 1 0 0 0 1 0 0 0 1 1 1 0 1 1 1 1 1 Code program zadacha_18; var a:array[1..100,1..100] of integer; i,j,n:integer; begin write('Введите количество строк и столбцов'); readln(n); for i:=1 to n div 2 do for j:=i to n do begin a[i,j]:=0; if ((j>=i) and (j<=(n-i+1))) and (i<=(n div 2)+1) then begin a[i,j]:=1; a[n-i+1,j]:=1; end; end; if n mod 2=1 then a[n div 2+1,j div 2+1]:=1; for i:=1 to n do begin for j:=1 to n do write(a[i,j]:2); writeln end; readln end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:24 | Сообщение # 4 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Дана матрица размерности m*n. Расположить элементы последнего столбца по убыванию. Code program zadacha_3; uses crt; var a:array [1..50] of integer; b:array [1..50] of integer; k,i,m,j,n,r,l:integer; begin clrscr; write('Введите количество строк'); readln(n); write('Введите количество столбцов'); readln(m); for i:=1 to n do for j:=1 to m do begin write('a[',i,']={b[',j,']=}'); readln(a[i]); end; for i:=1 to n-1 do for k:=i+1 to n do {for j:=1 to m do} if a[k]>a[i] then begin r:=a[i]; a[i]:=a[k]; a[k]:=r; end; writeln('Отсортированый массив:'); for i:=1 to n do writeln(a[i]:4); readln; end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:24 | Сообщение # 5 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Создать файл, содержащий сведения о телефонах абонентов. Каждая записаь имеет поля -- фамилия абонента, года установки телефона, номер телефона. По вводимой фамилии абонента выдать номер телефона. Определить количество установленных телефонов с хххх года. Номер года вводится с терминала. Code uses crt;{модуль для работы с клавиатурой и экраном, возможно В Free называется не так} type Tabonent=record fam:string[20]; god:word; nom:string[10]; end; var f:file of Tabonent; ab:Tabonent; fm:string[20]; gd:word; i,k,b:integer; c:char; begin clrscr; assign(f,'abonent'); rewrite(f); writeln('Введите данные об абонентах, окончание ввода Esc:'); i:=0; repeat i:=i+1; writeln('Абонент ',i); write(' Введите фамилию: ');readln(ab.fam); repeat write(' Введите год установки телефона (1950-2009):');readln(ab.god);{интервал годов можете изменить} until (ab.god>=1950)and(ab.god<=2009); write(' Введите номер телефона: ');readln(ab.nom); write(f,ab);{заносим запись в файл} c:=readkey;{ждем нажатия клавиши} until c=#27;{если Esc, заканчиваем ввод записей} clrscr; write('Введите фамилию для поиска:'); readln(fm); b:=0; reset(f); while not eof(f) do begin read(f,ab); if ab.fam=fm then begin b:=1; writeln(ab.nom); end; end; if b=0 then writeln('Такой фамилии нет!'); close(f); reset(f); repeat write('Введите искомый год начала установок телефонов(1950-2009):'); readln(gd); until (gd>=1950)and(gd<=2009); k:=0; b:=0; while not eof(f) do begin read(f,ab); if ab.god>=gd then begin k:=k+1; b:=1; end; end; if b=0 then writeln('После ',gd,' года телефоны не устанавливались') else writeln('Количество телефонов, установленных с ',gd,' года=',k); readln end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:26 | Сообщение # 6 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Дана действительная матрица размера m*n; упорядочить строки матрицы по неубыванию значений наименьших элементов строк. Code uses crt; const nmax=20; var a:array[1..nmax,1..nmax] of real; n,m,i,j,l,k:byte; mn,b:real; begin clrscr; randomize; repeat write('Количество строк от 1 до ',nmax,' m='); readln(m); until m in [1..nmax]; repeat write('Количество столбцов от 1 до ',nmax,' n='); readln(n); until n in [1..nmax]; writeln('Введите элементы матрицы:'); for i:=1 to m do for j:=1 to n do begin write('a[',i,',',j,']='); readln(a[i,j]); end; clrscr; {нахождение минимальных в строках и запись их в дополнительный столбец} for i:=1 to m do begin mn:=a[i,1]; for j:=1 to n do if a[i,j]<mn then mn:=a[i,j]; a[i,n+1]:=mn; end; writeln('Исходный массив:'); writeln('Мин.':(m*5+9)); for i:=1 to m do begin for j:=1 to n+1 do if j=n+1 then write(a[i,j]:8:1) else write(a[i,j]:5:1); writeln; end; {перестановка строк по неубыванию минимальных элементов(по последнему столбцу)} for i:=1 to m-1 do for l:=i+1 to m do if a[i,n+1]>a[l,n+1] then for j:=1 to n+1 do begin b:=a[i,j]; a[i,j]:=a[l,j]; a[l,j]:=b; end; writeln('Строки по неубыванию минимальных элементов:'); writeln('Мин.':(m*5+9)); for i:=1 to m do begin for j:=1 to n+1 do if j=n+1 then write(a[i,j]:8:1) else write(a[i,j]:5:1); writeln; end; readln end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:26 | Сообщение # 7 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Дана действительная матрица размера n*m. в которой не все элементы равны нулю. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент. Code program zadacha_19; uses crt; var a:array[1..100,1..100] of integer; {исходная матрица} b:array[1..100,1..100] of single; {конечная матрица} i:integer; {номер строки} j:integer; {номер столбца} n:integer; {количество строк} m:integer; {количество столбцов} max:integer; {наибольший по модулю элемент} begin clrscr; writeln ('Количество строк'); readln(n); writeln ('Количество столбцов'); readln(m); for i:=1 to n do {ввод элементов исходной матрицы} for j:=1 to m do begin write('a[',i,',',j,']='); readln(a[i,j]); end; writeln ('Исходная матрица:'); for i:=1 to n do {вывод элементов матрицы} begin for j:=1 to m do begin write(a[i,j]); end; writeln; end; max:=abs(a[1,1]); {нахождение наиб. элемента по модулю} for i:=1 to n do for j:=1 to m do begin if abs(a[i,j])>max then max:=abs(a[i,j]); end; writeln ('Наибольший по модулю элемент: ',max); for i:=1 to n do {деление каждого эл. нового массива на max} for j:=1 to m do begin b[i,j]:=a[i,j]/max; end; writeln(('Конечная матрица:'); for i:=1 to n do {вывод элементов конечной матрицы} begin for j:=1 to m do begin write(b[i,j]); end; writeln; end; readln; end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:26 | Сообщение # 8 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Дана матрица размера 5*10, преобразовать матрицу, поменяв местами минимальный и максимальный элемент в каждой строке. Code uses crt; const n=5; m=10; var a:array[1..n,1..m] of integer; i,j,min,max,imin,jmin,imax,jmax:integer; begin min:=0; max:=0; randomize; clrscr; writeln('Матрица 5x10 - '); for i:=1 to n do begin for j:=1 to m do begin a[i,j]:=random(10)-5; write(a[i,j]:2,' '); end; writeln; end; for i:=1 to n do begin for j:=1 to m do begin if a[i,j]<min then begin min:=a[i,j]; imin:=i; jmin:=j; end; if a[i,j]>max then begin max:=a[i,j]; imax:=i; jmax:=j; end; end; a[imin,jmin]:=max; a[imax,jmax]:=min; min:=0; max:=0; writeln; end; writeln('Преобразованная матрица 5х10 - '); for i:=1 to n do begin for j:=1 to m do begin write(a[i,j]:2,' '); end; writeln; end; end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:27 | Сообщение # 9 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Вычислить суммы элементов верхней треугольной матрице для матриц А(10,10) В(15,15) Code program procedure; usec crt; const n=40; type mas =array[1..n] of real; var i,n : byte; s : real; x ,y : mas; function vec(x,y:mas; n,kx:integer):real; var j : integer; r,rm : real; begin rm := -1e20; for j := 1 to n do begin r := sqrt(sgr(x[i])+sgr(y[i])); if (kx*r>=kx*rm) then rm := r; end; vec := rm end; { исполняемая часть главной программы } begin textattr:=27;clrscr; gotoxy(30,2);writeln(`'); write('Введите кол-во координат верхней полуплоскости. '); readln(n); writeln('Введите координаты'); for i :=1 to n do begin read(x[i]); write(` `);readln(y[i]); end; writeln(`Ближайшая точка удалена на расстояние =', s:=vec(x,y,n,-1); write('Введите кол-во координат нижней полуплоскости. '); readln(n); writeln('Введите координаты'); for i :=1 to n do begin read(x[i]); write(` `);readln(y[i]); end; writeln(`Наиболее удаленная точка находится на расстояни =', s:=vec(x,y,n,1); end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:27 | Сообщение # 10 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| дан файл целых чисел. Вывести количество содержащихся в нем серий (т.е. наборов последовательно расположенных одинаковых элементов) Code program file_int; var f : file of integer; a, b, k : integer; begin assign (f, 'integer.dat'); reset (f); k:=0; read (f, a); while not eof(f) do begin read (f, b); if b <> a then begin a:=b; k:=k+1 end end; write (p); close (f) end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:28 | Сообщение # 11 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Дана строка S и текстовый файл. Добавить строку S в начало файла. Code var f1,f2:text; s,s1:string; begin readln(s); assign(f1,'input.txt'); assign(f2,'output.txt'); reset(f1); rewrite(f2); writeln(f2,s); while not EOF(f1) do begin readln(f1,s1); writeln(f2,s1) end; writeln(f2,s); close(f1); close(f2) end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:29 | Сообщение # 12 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Дан текстовый файл. Вывести количество содержащихся в нем символов и строк (маркеры концов строк EOLN и конца файла EOF при подсчете количества символов не учитывать). Code program prog1; uses crt; var F: Text; namefile: string[50]; tmp: string[100]; len: integer; countstr, countch: integer; begin clrscr; write('Imya faila: '); readln(namefile); assign(F, namefile); reset(F); countstr:=0; countch:=0; while not Eof(F) do begin readln(F, tmp); countstr:=countstr+1; countch:=countch+length(tmp); end; close(F); writeln('Kol-vo strok v faile: ', countstr); writeln('Kol-vo simvolov: ' , countch); readln; end.
|
|
|
|
Admin | Дата: Пятница, 11.06.2010, 21:29 | Сообщение # 13 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Можно еще заместь вар к последней задачи применить такое условие Code type Toy=record nazva: string[40]; age: integer; kol: integer; vozrast1: integer; vozrast2: integer; end; var f : file of Toy; Toys : array[1..N] of Toy;
|
|
|
|
Admin | Дата: Среда, 20.10.2010, 22:45 | Сообщение # 14 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Поиск в упорядоченном массиве Code L:=1; R:=N; Mid:=(L+R) div 2; while (Mas[Mid]<>A) and (L'<'R) do begin if Mas[Mid]'<'A then L:=Mid+1 else R:=Mid-1; Mid:=(L+R) div 2 end; if Mas[Mid]=A then ShowMessage('Found at position '+ IntToStr(Mid)) else ShowMessage('Not found');
|
|
|
|
Admin | Дата: Среда, 20.10.2010, 22:45 | Сообщение # 15 |
Forum member
Группа: Admin
Зарегистрирован: 24.02.2010
Откуда: Цюрупинск
Пол: Мужчина
Сообщений: 691
Статус: Вне сайта
| Сортировка массива Code 1 for i:=2 to N do 2 for j:=N downto 1 do 3 if Mas[j-1]>Mas[j] then 4 begin 5 Tmp:=Mas[j]; 6 Mas[j]:=Mas[j-1]; 7 Mas[j-1]:=Tmpl 8 end;
|
|
|
|