Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С++] Процедура и функции, опять проблемы с динамикой :( 
:(
    Опции темы
Ангелинка
Дата 20.3.2007, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.3.2007

Репутация: нет
Всего: нет



Приверище всем smile ...ооочень нужна ваша помощь smile ...
У меня вот такие 3 задачки:
1. Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого (например, числа 220 и 284). Найти все пары «дружественных чисел», которые не больше данного числа N. 
2. Вычислить площадь правильного шестиугольника со стороной a, используя функцию вычисления площади треугольника. 
3. Описать рекурсивную логическую функцию Simm(S, i, j), проверяющую, является ли симметричной часть строки S, начинающаяся i-м и кончающаяся j-м ее элементами.
И вот такой код:
Код

#include <fstream.h>
#include <conio.h>
#include <iomanip.h>
#include <stdlib.h>
#include <math.h>
#include <iostream.h>
#include <string.h>


char s[100];
int simm;
int mas[10000]={0};

void F(int);

void F (int N)
    {
       int i,j;
       int S,n;
       n=0;
       for (i=1; i<N; i++)
          {
        S=0;
        for (j=1; j<=i/2; j++)
        if (i%j==0)
        S+=j;
        mas[n]=S;
        n++;
          }
}

void Z1()
{
  int N;
  int i,j;
  cout << "Введите N: \n";
  cin  >> N;
  F(N);
  for (i=1; i<N; i++)
  for (j=1; j<N; j++)
    if ( (mas[i-1]==j) && (mas[j-1]==i) && (i!=j))
       cout << mas[i-1] << " дружественное числу " << mas[j-1]<<endl;
}

float Sqr (int a)
  {
     float S;
     S=(sqrt(3)*pow(a,2))/4;
     return S;
  }

void Z2(int a)
{

float Sum;
Sum=6*Sqr(a);
cout<<"S="<<Sum<<endl;
}

int SIMM ( int i, int j)
{
   int n=strlen(s),simm=1;
   if (n/2 >=i)
      {
     if (s[i]!=(s[n-j]))
     simm=0;
      }
     else
     simm=SIMM(i+1,j+1);
     return simm;
}

void main()
{
clrscr;
int k;
cout << "Введите номер задания : ";
cin >> k;

switch( k )
{
    case 1:
       {
          Z1();
          break;
       }

    case 2:
       {
          int a;
          float Sum;
          cout << "Введите длину стороны: \n";
          cin  >> a;
          Z2(a);
          break;
       }

    case 3:
       {
          int i,j,prov;
          int n=strlen(s);
          cout << "Введите строку: \n";
          cin  >> s;
          if (n%2==0)
          prov=SIMM(0,1);
          else
          prov=SIMM(0,1);
          cout<<"Ответ: \n";
          if (prov)
          cout<<"‘Строка симметрична­  :)";
          else
          cout<<"‘Строка несимметрична  :(";
          break;
       }

    default: (cout<<"ЌҐЇа ўЁ«м­® ўўҐ¤Ґ­ ­®¬Ґа § ¤ зЁ\n");
    break;
}
getch();
return;
}

не могли бы вы помочь... smile 

я не знаю как это сделать динамикой smile ...
не понимаю почему не работает в основной программе clrscr...
не уверенна что первая задача вообще работает правильно (она выводит слишком много пар этих дружественных чисел...она должна быть реализована процедурой, причем ввод и вывод данных должен быть из основной программы-а у меня так не получается smile )...
и в третьей задаче...там нужен запрос i-того и j-того эллемента...а я не знаю как так сделать... smile 

Очень надеюсь на вашу помощь... smile ...заранее благодарна smile 
PM MAIL   Вверх
Lamak
Дата 20.3.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 8.5.2005
Где: Украина,Одесса

Репутация: 6
Всего: 7



вот третья:
Код


#include <iostream.h>
#include <conio.h>
#include <iomanip.h>

bool SIMM (char* s, int i, int j)
{
     if(s[i]==s[j])
     {
        if((i==j)||(i==j+1))
                return true;
        return SIMM(s,i+1,j-1);
     }
     else
        return false;
}
//---------------------------------------------------------------------------
int main()
{
      char *s="a123321er";
     
      if(SIMM(s,1,6))
        cout<<"Simm  :)";
      else
        cout<<"No Simm  :(";
      getch();
      return 0;
}


--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
Lamak
Дата 20.3.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 8.5.2005
Где: Украина,Одесса

Репутация: 6
Всего: 7



Цитата

1. Два натуральных числа называются «дружественными», если каждое из них равно сумме всех делителей (кроме его самого) другого (например, числа 220 и 284). Найти все пары «дружественных чисел», которые не больше данного числа N. 

Чё то не понятно:
220=2*2*5*11;  2+2+5+11 = 20;??? smile 
284=2*2*71;      2+2+71     = 75;??? smile 
 Что же такое «дружественные» числа?

Добавлено @ 12:08 
Цитата

опять проблемы с динамикой :( 

А где здесь динамика?
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
Ангелинка
Дата 20.3.2007, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.3.2007

Репутация: нет
Всего: нет



Lamak, спасибки за третью задачку smile ...но она у меня не компилируется...выдает ошибку declaration sintax error в в пятой строчке после SIMM  smile ...и...(я понимаю моя наглость безгранична smile )...ты бы не мог мне сказу написать как будет с запросом строки и вводом i и j...а то мне же так надо, а если я сейчас сама исправлять начну, то у меня только ошибок еще больше станет smile ...

а дружественные числа это....ну ты привел неправильный пример...там в задачке сказано "равно сумме всех делителей (кроме его самого) другого"...то есть там 
220=2+3+4+...+...+...на что там еще делится 284
а 284=2+4+5+10+...+...+на что делится 220...

т.е. надо найти все возможные делители числа (кроме его самого), сложить их...и по этому принципу обработать все числа до введенного с клавиатуры N...и сравнить еще потом...
PM MAIL   Вверх
Ангелинка
Дата 20.3.2007, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.3.2007

Репутация: нет
Всего: нет



да...просто препод говорит что все лабы должны быть решены динамически... smile ...а я в этом ничего не понимаю...вот и спрашиваю как сделать так чтобы все это работало динамически...
 smile 
PM MAIL   Вверх
Lamak
Дата 20.3.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 8.5.2005
Где: Украина,Одесса

Репутация: 6
Всего: 7



держи:
Код

//---------------------------------------------------------------------------
#include <vcl.h>
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <iomanip.h>
//---------------------------------------------------------------------------
int sum_delit(int x)
{
     int i;
     int Sum=0;
     for(i=1;i<x;i++)
     {
         if(x%i==0)
         {
             Sum+=i;

         }
     }
     return Sum;
}
//=====================
void Z1(int N)
{
        int i,j,k1,k2;
        for(i=2;i<N;i++)
        {
          k1=sum_delit(i);
          k2=sum_delit(k1);
          if((k2==i)&&(k1!=i)&&(i<k1))
                cout<<endl<<i<<" "<<k1;
        }
}
//---------------------------------------------------------------------------
float Sqr (int a)
{
     float S;
     S=(sqrt(3)*pow(a,2))/4;
     return S;
}
//=====================
float Z2(int a)
{
    float Sum;
    Sum=6*Sqr(a);
    return Sum;
}
//---------------------------------------------------------------------------
bool SIMM(char* s, int i, int j)
{
     if(s[i]==s[j])
     {
        if((i==j)||(i==j+1))
                return true;
        return SIMM(s,i+1,j-1);
     }
     else
        return false;
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[])
{
      int k;
      cout << "vvedite nomer zadania: ";
      cin >> k;
      switch( k )
      {
          case 1:
          {
                int n;
                cout << "Veddite N: ";
                cin >> n;
                Z1(n);
                break;
          }

          case 2:
          {
                int a;
                float Sum;
                cout << "vvod dlina storoni : \n";
                cin  >> a;
                cout<<"S="<<Z2(a)<<endl;
                break;
          }

          case 3:
          {
                int i,j;
                char s[100];
                cout << "\nvvod string: ";
                cin  >> s;
                cout << "\nvvod i: ";
                cin >> i;
                cout << "\nvvod j: ";
                cin >> j;
                if (SIMM(s,i,j))
                      cout<<"Simm  :)";
                else
                      cout<<"No Simm  :(";
                break;
          }

          default:
                cout<<"neverno vveli nomer\n";
          break;
      }
      getch();
      return 0;
}
//---------------------------------------------------------------------------


Добавлено @ 15:54 
Цитата(Ангелинка @  20.3.2007,  14:08 Найти цитируемый пост)
препод говорит что все лабы должны быть решены динамически... 

как на меня то он просто гонит smile  тут динамика нафиг не нужна smile !
 smile да и я себе вяло представляю как её сюда засунуть! smile 


--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
Ангелинка
Дата 20.3.2007, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 42
Регистрация: 12.3.2007

Репутация: нет
Всего: нет



Lamak, СПАСИБО ОГРОМНЕЙШЕЕ smile ...ооочень помог... smile 
но у меня опять почему то не работает  smile ....теперь выдает 2 ошибки : во второй строчке - unable to open vcl.h....и в той же в которой и была ошибка в 49... smile 
помоги пожалуйста...оно протестует против типа bool...я помню препод говорил что в С++ его нету....и если мы хотим его использовать должны написать enum bool(false, true)...я эту строчку вписывала во все места кода...и ничего хорошего не получается...я прям не знаю что с этой бедой делать... smile 
PM MAIL   Вверх
Lamak
Дата 20.3.2007, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 204
Регистрация: 8.5.2005
Где: Украина,Одесса

Репутация: 6
Всего: 7



эта библиотека тебе не нужна я просто забыл удалить
Код

//#include <vcl.h>

попробуй так
Код

int SIMM(char* s, int i, int j)
{
     if(s[i]==s[j])
     {
        if((i==j)||(i==j+1))
                return 1;
        return SIMM(s,i+1,j-1);
     }
     else
        return 0;
}

должно заработать

Добавлено @ 23:01 
а если хочеш чтоб с bool работало
 напиши в 7 строке, перед "int sum_delit(int x)":
Код

enum bool{false=0, true=1};


Это сообщение отредактировал(а) Lamak - 20.3.2007, 23:03
--------------------
Роботы - это интересно и увлекательно! 
PM MAIL   Вверх
agl
Дата 21.3.2007, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 25.6.2006

Репутация: 3
Всего: 3



Немного измененый алгоритм Lamak'a
3)
Код

#include <iostream>
#include <conio.h>
using namespace std;
int SIMM (char* s, int start, int end)
{
     if(start < end)
     {
         if(s[start] != s[end]) return 0;
         else  SIMM(s,start+1,end-1);
     }

      return 1;
}
//---------------------------------------------------------------------------
int main(void)
{
      char s[]="a123321er";
      
      if(SIMM(s,1,6))
        cout<< "Simm  :)\n";
      else
        cout<<"No Simm  :(\n";
      
      getch();
      return 0;
}



Это сообщение отредактировал(а) agl - 21.3.2007, 00:37
PM   Вверх
apook
Дата 21.3.2007, 07:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 794
Регистрация: 12.7.2006

Репутация: 10
Всего: 23



Я чесно говоря не врублаюсь что это за функция SIMM? что она
делает вообщее. Проверяет что-то 
Код

#include <iostream.h>
#include <conio.h>

enum bool{ false, true };

bool SIMM( char *s, int i, int j )
{
if( i<j )
{
    if( s[ i ] != s[ j ] )
        return false;
    else
        SIMM( s, i+1, j-1 );
    }
return false;
}


void main()
{
int i, j;
char s[ 100 ];

cout << "\nvvod string: ";
cin.get( s, 100 );
cout << s;
cin.ignore();

cout << "\nvvod i: ";
cin >> i;
cout << "\nvvod j: ";
cin >> j;

if( SIMM(s, i, j) )
    cout << "Simm  :)";
else
    cout << "No Simm  :(";

getch();
return;
}

 


--------------------
Мои руки из дуба, голова из свинца ну и пусть ...
PM MAIL   Вверх
agl
Дата 21.3.2007, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 65
Регистрация: 25.6.2006

Репутация: 3
Всего: 3



Цитата(Ангелинка )
3. Описать рекурсивную логическую функцию Simm(S, i, j), проверяющую, является ли симметричной часть строки S, начинающаяся i-м и кончающаяся j-м ее элементами.

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.