Народ подскажыте : - как найти длинну сторон Н-угольника , зная только массив координат его вершын(X,Y) ? - как найти угол при вершыне ? Если можно формулами ))) Зарание спс !
Нужна помощь по паскалю.! то сам не догоняю как сделать! Вообщем есть текст программы но он не работает.! Программа должна удалять из каждой тройки букв среднюю букву.!тип циклический. проблема в том что я написал, что бы было чтение данных из файла..!а нужно что бы они вводились с клавиатуры, и конец строчки заканчивалась .(точкой) т.е вводишь данные. 1 строчка йцукен конец строчки . начальное слово йцукен......преобразованное йукн . также я хз зачем создал еще Pysk, Pysk1, Ptr1 Uses Crt; type pSpisok = Slova; Slova = Record slv : string[10]; next : pSpisok end; var Head1, Tail1, Head2, Tail2, Ptr1, Ptr2, Pysk1, Pysk2 : pSpisok; St, Str : string[10]; F : text; I, K, N : integer; Name : string; begin ClrScr; Writeln ('Fail dolgen sodergat slova, raspologennie postrochno'); Writeln ('Vvedite imya faila: '); Readln (Name); Assign (F, Name); Reset (F); Head1 := Nil; Tail1 := Nil; Head2 := Nil; Tail2 := Nil; ClrScr; While not Eof(F) do begin Readln (F, St); New (Ptr1); Ptr1^.Slv :=St; Ptr1^.Next := Nil; If Tail1 <> Nil then Tail1^.Next := Ptr1; Tail1 := Ptr1; If Head1 = Nil then Head1 := Ptr1; end; Tail1^.Next := Head1; Ptr1 := Head1; Pysk1 := Head1; repeat Str := Ptr1^.Slv; N := length(str) - 1 div 3; If Str <> '' then K := 1; for I := 1 to N do begin Delete (Str, K+1, 1); K := K + 2; end; New (Ptr2); Ptr2^.Slv := Str; Ptr2^.Next := Nil; If Tail2 <> Nil then Tail2^.Next := Ptr2; Tail2 := Ptr2; If Head2 = Nil then Head2 := Ptr2; Pysk1 := Ptr1^.Next; Ptr1 := Pysk1; Until Pysk1 = Head1; Tail2^.Next := Head2; Pysk1 := Head1; Pysk2 := Head2; Ptr1 := Head1; ptr2 := Head2; repeat Write (Ptr1^.Slv,' '); Writeln (Ptr2^.Slv); Pysk1 := Ptr1^.Next; Pysk2 := Ptr2^.Next; Ptr1 := Pysk1; Ptr2 := Pysk2; until Pysk2 = Head2; repeat until KeyPressed; End.
Помогите пожалуйста, на С++ нужно описать шаблон функции, возвращающей минимальный из трех передаваемых в нее параметров любого (но одинакового) типа
тапа этого что-то, если тип будет int то перед тем как его передать в ф-ю надо преобразовать в float.... иль я чего-то недопонял. Code: float min(float a, float b, float c) { float m; m=a; if(b<m) m=b; if(c<m) m=c; return m; }
Ему надо шаблонную функцию Вот, держи Code: template<typename T> T func(T a, T b, T c) { if(a < b && a < c) return a; else if(b < a && b < c) return b; else return c; }
Есть программа которая разрезает картинку на 9ть частей в произвольном порядке (то есть как несобранный пазл) нужно чтобы при правильном сборе картинки программа выдавала сообщение: "вы выиграли!" Код разбиения картинки ниже, также еще само собой имеется код который позволяет перетягивать по форме отрезаные части. Code: void __fastcall TForm1::FormCreate(TObject *Sender) { TImage * Pict = new TImage(Form1); Pict->AutoSize = true; /* В следующем операторе указано имя загружаемого файла */ Pict->Picture->LoadFromFile("CUS6.BMP"); Image1->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas, Rect(0,0,Pict->Width / 3,Pict->Height / 3)); Image3->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas, Rect(Pict->Width / 3,0,Pict->Width *2/ 3,Pict->Height / 3)); Image2->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas, Rect(Pict->Width *2/ 3,0,Pict->Width,Pict->Height / 3)); Image5->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas, Rect(0,Pict->Height / 3,Pict->Width / 3,Pict->Height *2/ 3)); Image4->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas, Rect(Pict->Width / 3,Pict->Height / 3,Pict->Width *2/ 3,Pict->Height *2/ 3)); Image6->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas, Rect(Pict->Width *2/ 3,Pict->Height / 3,Pict->Width,Pict->Height *2/ 3)); Image9->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas, Rect(0,Pict->Height *2/ 3,Pict->Width / 3,Pict->Height)); Image7->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas, Rect(Pict->Width / 3,Pict->Height *2/ 3,Pict->Width *2/ 3,Pict->Height)); Image8->Canvas->CopyRect(Image1->ClientRect, Pict->Canvas, Rect(Pict->Width *2/ 3,Pict->Height *2/ 3,Pict->Width,Pict->Height));
Как будет выглядеть действие из каждой тройки букв удали среднюю?? Delete (Str, K+1, 1); K := K + 1; вот так или нет? паскаль
Люди help помогите, можете написать пожалуйста любую игру средней сложности на pascalABC (если не сложно с объяснением). Заранее БОЛЬШОЕ спасибо.
хелп.... нужна прога нв паскале: ввод массива чисел в прямоугольную матрицу MxN(M<N) размер массива по M>7. Умножение элементов матрицы на число НЕ АКТУАЛЬНО
Ребят в С++ нужно сделать так чтобы при перетягивании из одного имэйджа в другой .когда картинка покрывает большую половину второго имейджа(тот на который перетягую) сама притягивалась("прилипала") к нему... ( чтобы не выставлять по милиметру)
в делфи нужно решить 2 массива: 1) Заполнить масив A(n,m) единицами по главной диагонали остальные элементы произвольные числа. Заполнить массив по второй диагонали значением суммы элементов по 2 стровек массив распечатать. 2) В массиве X(n,m) определить: а)количество положительных отрицательных и нулевых элементов б) номер первого отрицательного элемента.
Люди помогите перевести из turbo pascal в pascalABC: uses crt,graph; var a,b,bb,x,y,i,jx,jy:integer; xx,yy:array[1..1000] of integer; c:char; n:boolean; begin initgraph(a,b,''); randomize; a:=1; i:=1; n:=false; x:=100; y:=240; rectangle(0,0,639,479); repeat jx:=random(640); jy:=random(480); if getpixel(jx,jy)=0 then begin for i:=-3 to 3 do begin putpixel(jx+i, jy, 14); putpixel(jx,jy+i,14); end; a:=1; end else a:=0; until a=1; i:=1; repeat a:=a+1; if a=150*i+1 then a:=1; if n=false then x:=x+1; if ord(c)=72 then y:=y-1; if ord(c)=75 then x:=x-1; if ord(c)=77 then x:=x+1; if ord(c)=80 then y:=y+1; if getpixel(x,y)=15 then c:='x'; if getpixel(x,y)=14 then begin for b:=y-10 to y+10 do begin for bb:=x-10 to x+10 do if getpixel(bb,b)=14 then putpixel(bb,b,0); end; repeat jx:=random(640); jy:=random(480); if getpixel(jx,jy)=0 then begin for b:=-3 to 3 do begin putpixel(jx+b, jy, 14); putpixel(jx,jy+b,14); end; b:=1; end else b:=0; until b=1; i:=i+1; end; putpixel(x,y,15); delay(15); putpixel(xx[a],yy[a],0); xx[a]:=x; yy[a]:=y; if keypressed then n:=true; if keypressed then c:=readkey; until (c='x') or (i=10); if c='x' then begin settextstyle(1,0,8); setcolor(9); outtextxy(150,200,'THE END...'); end; if i=10 then begin setcolor(10); settextstyle(3,0,8); outtextxy(150,200,'CONGRATS!'); end; delay(500); readkey; closegraph; end.
кто-нибудь может переписать задачу под задачу в которой из одной вершины может быть несколько ребер? Нужно добавить еще один цикл в функцию, в котором будет перебираться количество ветвей из текущей вершины. Идти будет от 1 до некоего T, которое будет изменяться (это количество оставшихся вершин). Code: #include <stdio.h> #include <conio.h> #include <time.h> #include <math.h> #include <stdlib.h> // структура "точка" struct Scoord { double x; double y; }; const int LMAX=0, RMAX=30, TMAX=24, BMAX=0; int N; double Smin; // сюда запишем минимальную сумму int *minPath; // здесь будет минимальный путь double **matr; // матрица, где будем хранить длины ребер Scoord *mas; // массив точек // рекурсивная функция для поиска пути. // принимает указатель на текущий путь (который формируется с каждым вызовом) // порядковый номер текущей вершины и текущую сумму ребер void getMinPath(int *tekPath, int tek, double tekS) { if(tek==N) // если перебрали все вершины { if(tekS<Smin || Smin==0) // и если текущая сумма меньше той, которую запомнили { Smin = tekS; // запоминаем for(int j=0; j<N; j++) minPath[j] = tekPath[j]; // и запоминаем путь } return; } // иначе... bool b; for(int i=0; i<N; i++) // перебираем все вершины { b = false; for(int j=0; j<tek; j++) // смотрим, нет ли текущей вершины в уже сформировавшемся пути if(tekPath[j]==i) b=true; // если есть, ставим флаг if(b) continue; // если флаг установлен, пропускаем вершину и берем следующую tekPath[tek] = i; // добавляем вершину к пути getMinPath(tekPath, tek+1, tekS+matr[tekPath[tek-1]][i]); // и ищем следующую вершину } } //----------- // функция для заполнения матрицы // принимает указатель на матрицу void fillMatr(double **matr) { int i,j; double dlina; for(i=0;i<N;i++) for(j=0;j<N;j++) if(j==i) continue; else { // для двух разных вершин считаем длину ребра dlina = sqrt(pow(mas[i].x-mas[j].x,2)+pow(mas[i].y-mas[j].y,2)); if(dlina<matr[i][j] || matr[i][j]==0) matr[i][j] = dlina; } } //---------------------- int main() { int i,j; int *tekPath; srand(time(NULL)); printf("Vvedite kolichestvo vershyn: "); scanf("%d",&N); // выделяем память под массив вершин mas = new Scoord[N]; for(i=0;i<N;i++) { // разбрасываем точки mas[i].x = rand()*(RMAX-LMAX)/(double)RAND_MAX+LMAX; mas[i].y = rand()*(BMAX-TMAX)/(double)RAND_MAX+TMAX; printf("To4ka %d: %5.3lf %5.3lf\n",i,mas[i].x,mas[i].y); } printf("\n"); //================== // выделяем память под матрицу matr = new double*[N]; for(i=0;i<N;i++) matr[i] = new double[N]; // память под минимальный и текущий пути tekPath = new int[N]; minPath = new int[N]; Smin = 0; for(i=0; i<N;i++) for(j=0;j<N;j++) matr[i][j] = 0; fillMatr(matr); // заполняем матрицу // ищем минимальный путь for(i=0; i<N; i++) // в цикле перебираем стартовые вершины { tekPath[0] = i; getMinPath(tekPath, 1, 0); } printf("\n Minimalnaya summa = %5.3lf\n\n",Smin); printf("derevo:\n"); printf("%d",minPath[0]); for(i=1;i<N;i++) printf(" -> %d",minPath[i]); printf("\n"); for(i=0;i<N;i++) delete[] matr[i]; delete[] matr; delete mas; delete[] minPath; delete[] tekPath; getch(); return 0; }