Студентам с лабораторными сюда (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _Great_, 20 Jun 2007.

Thread Status:
Not open for further replies.
  1. 043nKRuT0y

    043nKRuT0y Elder - Старейшина

    Joined:
    31 Oct 2007
    Messages:
    226
    Likes Received:
    8
    Reputations:
    0
    Народ подскажыте :
    - как найти длинну сторон Н-угольника , зная только массив координат его вершын(X,Y) ?
    - как найти угол при вершыне ?

    Если можно формулами ))) Зарание спс !
     
  2. snAKe33

    snAKe33 Active Member

    Joined:
    10 Feb 2009
    Messages:
    13
    Likes Received:
    169
    Reputations:
    24
    Нужна помощь по паскалю.!
    то сам не догоняю как сделать!
    Вообщем есть текст программы но он не работает.!
    Программа должна удалять из каждой тройки букв среднюю букву.!тип циклический.
    проблема в том что я написал, что бы было чтение данных из файла..!а нужно что бы они вводились с клавиатуры, и конец строчки заканчивалась .(точкой)
    т.е вводишь данные.
    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.
     
    #1262 snAKe33, 15 Apr 2009
    Last edited: 15 Apr 2009
  3. 043nKRuT0y

    043nKRuT0y Elder - Старейшина

    Joined:
    31 Oct 2007
    Messages:
    226
    Likes Received:
    8
    Reputations:
    0
    N-угольник не равносторонний !
     
  4. DDN

    DDN New Member

    Joined:
    26 Feb 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Помогите пожалуйста, на С++ нужно описать шаблон функции, возвращающей минимальный из трех передаваемых в нее параметров любого (но одинакового) типа
     
  5. fker

    fker Member

    Joined:
    26 Nov 2008
    Messages:
    135
    Likes Received:
    64
    Reputations:
    -1
    тапа этого что-то, если тип будет 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;
    }
    
     
  6. razb

    razb Active Member

    Joined:
    24 Mar 2009
    Messages:
    658
    Likes Received:
    133
    Reputations:
    18
    Ему надо шаблонную функцию

    Вот, держи
    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;
    }  
     
    1 person likes this.
  7. DDN

    DDN New Member

    Joined:
    26 Feb 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Подскажите еще, как перегрузить операторы ввода/вывода
     
  8. Plaxxx

    Plaxxx New Member

    Joined:
    1 Nov 2008
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Есть программа которая разрезает картинку на 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));
     
  9. snAKe33

    snAKe33 Active Member

    Joined:
    10 Feb 2009
    Messages:
    13
    Likes Received:
    169
    Reputations:
    24
    Как будет выглядеть действие из каждой тройки букв удали среднюю??
    Delete (Str, K+1, 1);
    K := K + 1;
    вот так или нет?
    паскаль
     
  10. Ajax5

    Ajax5 New Member

    Joined:
    21 Mar 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Люди help помогите, можете написать пожалуйста любую игру средней сложности на pascalABC (если не сложно с объяснением). Заранее БОЛЬШОЕ спасибо.
     
  11. MRAK9

    MRAK9 Member

    Joined:
    29 Jul 2007
    Messages:
    115
    Likes Received:
    26
    Reputations:
    0
    хелп.... нужна прога нв паскале:

    ввод массива чисел в прямоугольную матрицу MxN(M<N) размер массива по M>7. Умножение элементов матрицы на число

    НЕ АКТУАЛЬНО
     
    #1271 MRAK9, 16 Apr 2009
    Last edited: 16 Apr 2009
  12. ss88

    ss88 Banned

    Joined:
    27 Nov 2008
    Messages:
    160
    Likes Received:
    44
    Reputations:
    5
    Куда мир катится? Даже по таким пустякам просить у кого-то помощи - это уж черезчур...
     
  13. MRAK9

    MRAK9 Member

    Joined:
    29 Jul 2007
    Messages:
    115
    Likes Received:
    26
    Reputations:
    0
    хех-ссори за эт просьбу-я просто не успевал все сделать, вот и попросил на ночь глядя
     
  14. snAKe33

    snAKe33 Active Member

    Joined:
    10 Feb 2009
    Messages:
    13
    Likes Received:
    169
    Reputations:
    24
    HELP!!!!
     
    #1274 snAKe33, 16 Apr 2009
    Last edited: 21 Apr 2009
  15. Plaxxx

    Plaxxx New Member

    Joined:
    1 Nov 2008
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Ребят в С++ нужно сделать так чтобы при перетягивании из одного имэйджа в другой .когда картинка покрывает большую половину второго имейджа(тот на который перетягую) сама притягивалась("прилипала") к нему... ( чтобы не выставлять по милиметру)
     
  16. Baofy

    Baofy Member

    Joined:
    26 Feb 2009
    Messages:
    12
    Likes Received:
    72
    Reputations:
    7
    в делфи нужно решить 2 массива:
    1) Заполнить масив A(n,m) единицами по главной диагонали остальные элементы произвольные числа. Заполнить массив по второй диагонали значением суммы элементов по 2 стровек массив распечатать.

    2) В массиве X(n,m) определить:
    а)количество положительных отрицательных и нулевых элементов
    б) номер первого отрицательного элемента.
     
  17. Ajax5

    Ajax5 New Member

    Joined:
    21 Mar 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Люди помогите перевести из 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.
     
  18. Plaxxx

    Plaxxx New Member

    Joined:
    1 Nov 2008
    Messages:
    14
    Likes Received:
    0
    Reputations:
    0
    Подскажите пжлст,где можно взять исходник самых примитивных пазлов под C++ builder???
     
  19. Aser

    Aser New Member

    Joined:
    17 Apr 2009
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    помогите плиз!!! нужна прога на С++ которая складывает, умножает, обращает, транспонирует матрицы
     
  20. sebay

    sebay Member

    Joined:
    9 Mar 2009
    Messages:
    26
    Likes Received:
    22
    Reputations:
    0
    кто-нибудь может переписать задачу под задачу в которой из одной вершины может быть несколько ребер?
    Нужно добавить еще один цикл в функцию, в котором будет перебираться количество ветвей из текущей вершины. Идти будет от 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;
    }
     
Thread Status:
Not open for further replies.