Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Серия задач:ломаная,ряды, последовательности...


Автор: IceQween 30.12.2008, 22:41
[C++]

1(2.31 И снова числа) Написать функции для основных операций с векторами (пробую через класс - ничего хорошего из этого не получается)
2.(3.32 Последовательности символов) Написать функцию, которая одевает строку в кавычки. Передавая строку этой функции позаботиться о том, чтобы было достаточно дополнительного места в том участке памяти, в который положена строка.
3.(4.31 Тексты) Дан текст, в каждой строке которого записаны координаты точек, которые являются вершиной ломаной линии на плоскости. Выяснить, пересекает ли ломаная сама себя.
4. (8.27 Рекурсия) Возьмем тоненькую полоску бумаги и, положив ее на стол, придержим левый конец. Далее согнем посередине так, чтобы правый конец оказался сверху над левым. Будем повторять эту процедуру N раз. Понятно, что теперь полоска укрыта линиями изгибов. Написать функцию, которая покажет направления всех изгибов от левого края полоски.
5. (9.26 Матрицы) Занести в квадратную матрицу порядка 10 таблицу умножения десятичной системы исчисленя.
На этом пока все. Буду рада любой подсказке. Заранее благодарна всем отозвавшимся! 

Автор: JackYF 30.12.2008, 23:05
Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 

Автор: solverr 31.12.2008, 00:28
Решу всё по 80 руб за задачку. Контакты в подписи.

Автор: solverr 31.12.2008, 13:07
Цитата(IceQween @  30.12.2008,  22:41 Найти цитируемый пост)
4. (8.27 Рекурсия) Возьмем тоненькую полоску бумаги и, положив ее на стол, придержим левый конец. Далее согнем посередине так, чтобы правый конец оказался сверху над левым. Будем повторять эту процедуру N раз. Понятно, что теперь полоска укрыта линиями изгибов. Написать функцию, которая покажет направления всех изгибов от левого края полоски.

Код

#include <iostream>
using namespace std;

int n;

void rec(int k, bool rev) {
    if (k == n) return;
    rec(k+1, rev);
    cout << (rev ? 'D' : 'U');
    rec(k+1, !rev);
}

int main() {
    cin >> n;
    rec(0, false);
    cout << endl;
}

U - up - изгиб "смотрит" вверх, D - down - вниз.

Подарок на новый год smile

Автор: IceQween 31.12.2008, 15:48
Спасибо.   Щедрые у тебя подарки)))  smile Я совсем не надеялась на полное решение. 
С наступающим! smile 

Автор: Dmi3ev 31.12.2008, 17:23
Следую своему принципу: один день-> одна помощь тому, кто в ней нуждается:
Код

//---------------------------------------------------------------------------
#include <iostream.h>
using namespace std;
//---------------------------------------------------------------------------
class MyVec
{
public:
 MyVec(){};
 void Set(double a, double c)
  {
   bv=a;
   ev=c;
  }
 double bov(){return (bv);};
 double eov(){return (ev);};
 ~MyVec(){};
private:
 double bv, ev;
};

void v_plus_v(MyVec v1, MyVec v2)
{
 MyVec c;
 double cb, ce;
 cb=v1.bov()+v2.bov();
 ce=v1.eov()+v2.eov();
 c.Set(cb, ce);
 cout<<"*******************"<<endl;
 cout<<"-> ->"<<endl;
 cout<<"V1+V2: "<<endl;
 cout<<"->"<<endl;
 cout<<"C ("<<c.bov()<<", "<<c.eov()<<")"<<endl;
 return;
}

MyVec v_x (MyVec a, double n)
{
 a.Set((a.bov()*(n)), (a.eov()*(n)));
 return a;
}


void v_minus_v (MyVec v1, MyVec v2)
{
 v2=v_x(v2, (-1.0));
 MyVec c;
 double cb, ce;
 cb=v1.bov()+v2.bov();
 ce=v1.eov()+v2.eov();
 c.Set(cb, ce);
 cout<<"*******************"<<endl;
 cout<<"-> ->"<<endl;
 cout<<"V1-V2: "<<endl;
 cout<<"->"<<endl;
 cout<<"C ("<<c.bov()<<", "<<c.eov()<<")"<<endl;
 return;
}

int main()
{
MyVec vec1;
vec1.Set(1.0, 2.0);
MyVec vec2;
vec2.Set(6.0, 2.0);
v_plus_v(vec1 ,vec2);
v_minus_v(vec1, vec2);
MyVec c=v_x(vec1, 2);
cout<<"*******************"<<endl;
cout<<"->"<<endl;
cout<<"V1 * 2: "<<endl;
cout<<"->"<<endl;
cout<<"C ("<<c.bov()<<", "<<c.eov()<<")"<<endl;
system("pause");
return 0;
}
//---------------------------------------------------------------------------

здесь сложение, вычитание, умножение вектора на число, по аналогии можно сделать произведение (скалярное...)
можно еще вектор задавать с помощью точек.
вот, например, вариант класса точки:
Код

class MyPoint
{
public:
 MyPoint(double a=0.0, double b=0.0)
  {
   x=a;
   y=b;
  };
 void Set(double a=0.0, double b=0.0)
  {
   x=a;
   y=b;
  };
 double Getx(){return x;};
 double Gety(){return y;};
 ~MyPoint(){};
private:
 double x, y;
};


выполнил план на сегодня  smile 
не стал выбирать, как solverr, взял первую...  smile 

Автор: IceQween 4.1.2009, 16:31
Всех еще раз с прошедшим! Спасибо за помощь! Теперь у меня осталась последняя задача:
 3.(4.31 Тексты) Дан текст, в каждой строке которого записаны координаты точек, которые являются вершиной ломаной линии на плоскости. Выяснить, пересекает ли ломаная сама себя.
 Остальные с вашей помощью вышли))) А по поводу последней, если есть какие-нибудь идеи, поделитесь! ))) smile  

Автор: Dmi3ev 4.1.2009, 17:06
вот последняя  smile
Код

//---------------------------------------------------------------------------
#include <iostream.h>
using namespace std;
//---------------------------------------------------------------------------
int main()
{
long int a[10][10];
for (int i=0; i<10; i++)
 {
  for (int j=0; j<10; j++)
   {
    a[i][j]=(i+1)*(j+1);
    cout<<a[i][j]<<"; ";
   }
  cout<<endl;
 }
system("pause");
return 0;
}
//---------------------------------------------------------------------------

Цитата

 3.(4.31 Тексты) Дан текст, в каждой строке которого записаны координаты точек, которые являются вершиной ломаной линии на плоскости. Выяснить, пересекает ли ломаная сама себя.

а у тебя есть идеи? можно даже тупо создать класс прямой, которая задается двумя соседними точками. У прямой есть уравнение. Допустим две прямые из нашего множества пересекаются, точка пересечения принадлежит отрезкам, образованным точками, которые задают эти прямые, то ломанная пересекает, если нет, то не пересекает. Можно еще как-нибудь. 
Твои идеи где??? Здесь уже не программирование, а скорее математика нужна. Или у тебя с математикой также, как с программированием?  smile По ходу также  smile

Добавлено через 1 минуту и 24 секунды
вот класс прямой, для примера
Код

#ifndef MYLINE_H
#define MYLINE_H
#include <mypoint.h>
#include <math.h>
class MyLine
{
public:
 MyLine (MyPoint A, MyPoint B){ p1=A; p2=B;};
 double Getk()
  {
   if ((p1.Getx()-p2.Getx())!=0)
     k=(p1.Gety()-p2.Gety())/(p1.Getx()-p2.Getx());//tg
   return k;
  };
 double Getb()
  {
   if ((p1.Getx()-p2.Getx())!=0)
     b=p1.Gety()-((p1.Gety()-p2.Gety())/(p1.Getx()-p2.Getx()))*p1.Getx();//free member
   return b;
  };
 double Getr()//Gip
  {
   r=sqrt(pow((p1.Getx()-p2.Getx()), 2)+pow((p1.Gety()-p2.Gety()), 2));
  }; 
 ~MyLine (){};
private:
 MyPoint p1, p2;
 double k, b, r;
};
#endif


Добавлено через 1 минуту и 58 секунд
а вот класс точки ,который там используется
Код

#ifndef MYPOINT_H
#define MYPOINT_H
class MyPoint
{
public:
MyPoint(double a=0.0, double b=0.0){x=a; y=b;};
void Set(double a, double b){x=a; y=b;};
double Getx(){return x;};
double Gety(){return y;};
~MyPoint(){};
private:
double x, y;
};
#endif

делай

Автор: IceQween 5.1.2009, 00:58
Не издевайся!Я стараюсь!  smile Но где-то не получается, где-то Лень-матушка просыпается)) smile 
 Идеи-то есть. Я уже и сама написала класс для точки, сегмента и "общий" класс для ломаной. Но это такие "навороты"! Ведь тогда мы получаем систему из N линейных уравнений, которую также надо как-то решить(скорее всего методом Гаусса, хотя можно просто найти детерминант. Еслит он равен нулю, то прямые пересекаются или совпадают)) К тому же недостаточно просто найти решения уравнений, ведь тогда пересекутся прямые, но не обязательно отрезки на этих прямых. То есть нужно составлять еще и что-то вроде неравенств. Но тем не менее собрать это все в кучу у меня как-то не очень получается. Неужели нельзя как-нибудь по-проще? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)