Имя пользователя:
Пароль:
 

Название темы: Помогите решить
Показать сообщение отдельно

Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


По поводу задачи А) в шестом задание, не могу правильно вычислить второй тип, когда в функции есть переменными параметрами, почему-то код: выдаёт какое-то число десятизначное, число... Почему так, и как нужно правильно? Подскажите?!
Код: Выделить весь код
void PrintString(const char *S, ...)
{ 
   va_list ap;
   va_start(ap, S);            // раскрутка arg
//   int COUNTER = va_arg(ap, int);
   int  COUNTER = 0;

//   cout<<" COUNTER = "<<COUNTER<<endl;
   if((COUNTER = va_arg(ap, int)) > 0){
       ....// code...
    }
//----------------------------------
Цитата elektra192:
Задание №6. »
Задача "А")
читать дальше »
Код: Выделить весь код
//---------------------------------------------------------------------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <stdarg.h>
//#include <stdio.h>

void PrintString(const char *String, ...);

int main()
{
   char *s = "Hello Anna!";
   char *sPtr = &(*s);
   int counter,
       z;
       
   cout<<" Enter String: ";
   cin.getline(s, 100, '\n');

//   PrintString(sPtr);

   cout<<" Enter Number: ";
   cin>>counter;
   while(counter < 0){
       cout<<" Enter Number: ";
       cin>>counter;
     }

   PrintString(sPtr, counter);

   cin>>z;
        return 0;
}
//---------------------------------------------------------------------------
void PrintString(const char *S, ...)
{
   
   va_list ap;
   va_start(ap, S);            // раскрутка arg
//   int COUNTER = va_arg(ap, int);
   int  COUNTER = 0;

//   cout<<" COUNTER = "<<COUNTER<<endl;
   if((COUNTER = va_arg(ap, int)) > 0){

   cout<<" Vono=="<<endl;
   cout<<" COUNTER = "<<COUNTER<<endl;
     for(int i = 0; i < COUNTER; i++)
        cout<<" Num: "<<i<<"Output: "<<S<<endl;
        va_end(ap);
    }
                     // очистка arg
   else{
       cout<<" Ne vono"<<endl;
        cout<<"Output: "<<S<<endl;
     }
}
//----------------------------------------------------------------------

В чём я ошибся, или не так сделал?!

Цитата elektra192:
Задание 7. »
Задача "А")
читать дальше »
Код: Выделить весь код
// Написать програму с использованием конструктора копирования.
// Обьявить класс MyClass, который содержит функцию f1(), что будет возвращать обьект MyClass,
// функцию f2(), что будет получать обьект типа MyClass как параметр
// и выводить на экран значение закрытых переменных класса для данного обьекта,
// конструктор и конструктор копирования.
// В основной части программы присвойте обьекту класса результат выполнения функции f1(),
// используйте функцию f2(), выполните явную инициализацию одного обьекта другим.
// Все конструкторы выводят на экран "В конструкторе" или "В конструкторе копирования".
//----------------------------------------------------------------------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

class MyClass{ // Класс MyClass
   friend void fr2(MyClass MC);
public:
   MyClass(int x = 1) { num = x; cout<<" Konstruktor = "<<num<<endl; } // Конструктор
   MyClass(const MyClass &MC); // Копирующий конструктор
   const MyClass fr1() { return *this; };
private:
   int num; // Число....
};
// Копирующий конструктор-----------------------------------------------------
MyClass::MyClass(const MyClass &MC)
{
   num = MC.num;
   cout<<"\n Konstruktor Copy = "<<num<<endl;
}
// Функция fr2(), принимает однин параметр MyClass и выводит значения закрытых членов
void fr2(MyClass MC)
{
    cout<<" Activation Function fr2(MyClass MC)"<<endl;
    cout<<" Value = "<<MC.num<<endl;
}
// Выполнение программы-------------------------------------------------------
int main()
{
   int z;
   MyClass MC_1(-88),
           MC_2(105),
           MC_3(247),
           MC_4(-578),
           MC_5(MC_1),
           MC_6,
           MC_7;

   MC_6 = MC_2;  // Присваивание одного объекта другому
   fr2(MC_6.fr1()); // Инициализация одного объекта другим, через вызов функции fr1()

   fr2(MC_4); // Инициализация одного объекта другим
   fr2(MC_5.fr1()); // Инициализация одного объекта другим, через вызов функции fr1()

   cin>>z;
        return 0;
}
//---------------------------------------------------------------------------

Задача "Б")
читать дальше »
Код: Выделить весь код
// Написать программу вычисления среднего арифметического 5 и 2-х чисел, в которой:
// 1.Перегрузить функцию в зависимости от количества аргументов.
// 2.Использовать арагументы по умолчанию--------------------------------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <iomanip.h>
using std::setprecision;
using std::setiosflags;

// Вычисление среднего арифметического с пятью параметром---------------------
double Average(double V1 = 2.0, double V2 = 5.0, double V3 = 7.0, double V4 = 9.0, double V5 = 8.0)
  {  return (V1 + V2 + V3 + V4 + V5) / 5;  };
// Вычисление среднего арифметического с двумя параметрами--------------------
double Average(int V1 = 4.0, int V2 = 7.0)
  {  return (static_cast<double>(V1) + static_cast<double>(V2)) / 2;  };
//----------------------------------------------------------------------------
int main()
{
   int num6,         // Число 6
       num7,         // Число 7
       z;
   double num1,      // Число 1
          num2,      // Число 2
          num3,      // Число 3
          num4,      // Число 4
          num5,      // Число 5
          average1,  // Среднее 1
          average2;  // Среднее 2

   // Форматирование потока...
   cout<<setiosflags(ios::fixed | ios::showpoint)
         <<setprecision(1);

   // Ввод пяти чисел для функции с пятью аргументами (double)...
   cout<<" Print Result Average 5 Arguments\n";
   cout<<" Enter number 1: ";
   cin>>num1;
   cout<<" Enter number 2: ";
   cin>>num2;
   cout<<" Enter number 3: ";
   cin>>num3;
   cout<<" Enter number 4: ";
   cin>>num4;
   cout<<" Enter number 5: ";
   cin>>num5;
   
   // Функция вычисляет среднее для пяти параметров
   average1 = Average(num1, num2, num3, num4, num5);
   cout<<" Average s 5 Arguments = "<<average1<<endl<<endl;

   // Ввод двух чисел для функции с двумя параметрами (int)...
   cout<<" Print Result Average 2 Arguments\n";
   cout<<" Enter number 1: ";
   cin>>num6;
   cout<<" Enter number 2: ";
   cin>>num7;

   // Функция вычисляет среднее для двух параметров
   average2 = Average(num6, num7);
   cout<<" Average s 2 Arguments = "<<average2<<endl<<endl;

   // Печать результатов среднего по умолчанию для функции с пятью параметрами
   cout<<" Print Result Average Default 5 Argument\n";
   average1 = Average(3.3, 4.4, 7.7);
   cout<<" Average Default 5 Argument = "<<average1<<endl<<endl;

   // Печать результатов среднего по умолчанию для функции с двумя параметрами
   cout<<" Print Result Average Default 2 Argument\n";
   average2 = Average(55, 88);
   cout<<" Average Default 2 Argument = "<<average2<<endl;

   cin>>z;
        return 0;
}
//---------------------------------------------------------------------------

Задача "В")
читать дальше »
Код: Выделить весь код
// Создать класс StrType, который содержит(закрытые переменные)
// саму строку (char* p;) и длину этой строки (int len;).
// Определить открытые функции получения строки и длины строки.----------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

//#include "StrType.h"

class StrType{ // Класс StrType
public:
   StrType(char *s = "Anna", int l = 8); // Конструктор с аргументами по умолчанию
   int getLen() const { return len; };   // Получение длины строки
   char *getString() { return p; };      // Получение строки
   void Print();    // Печать объекта, вывод значений...
private:
   char *p;   // Строка
   int len;   // Длина строки
};
// Конструктор по умолчанию--------------------------------------------------
StrType::StrType(char *str, int lenght)
{
   p = str;
   len = lenght;
}
// Печать объекта, для проверки----------------------------------------------
void StrType::Print()
{
  cout<<" Value Default\n\n";
  cout<<" String (*p): "<<getString()<<endl;
  cout<<" Lenght (len) = "<<getLen()<<endl;
}
// Демонстрация композиции. Тестирование-------------------------------------
int main()
{
   int z;
   StrType s;

   s.Print();
   cin>>z;
        return 0;
}
//---------------------------------------------------------------------------

Задача "Г")
читать дальше »
Код: Выделить весь код
// Создать класс StrType, который содержит(закрытые переменные)
// саму строку (char* p;) и длину этой строки (int len;).
// Определить открытые функции получения строки и длины строки.----------------
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <cstring.h>
#include <cassert>

class StrType{ // Класс StrType
public:
   StrType(); // Конструктор без аргументов
   StrType(char *s, int l); // Конструктор с аргументами
   int getLen() const { return len; };   // Получение длины строки
   char *getString() { return p; };      // Получение строки
   void Print();    // Печать объекта, вывод значений...
private:
   char *p;   // Строка
   int len;   // Длина строки
};
// Конструктор без параметров, с вводом с клавиатуры--------------------------
StrType::StrType()
{
  char sTemp[255] = ""; // Временный символьный массив

  len = 255;
  p = new char[255 + 1]; // Выделение памяти в 255 байт плюс завершающий символ
  assert(p != 0);  // Проверка выделения памяти

  cout<<" Enter String: ";  // Предложение ввода
  cin.getline(sTemp, 255, '\n'); // Ввод строки символов

  strcpy(p, sTemp);  // Копирование строки символов в "р"
  delete []sTemp;
}
// Конструктор с параметрами, без ввода с клавиатуры--------------------------
StrType::StrType(char *str, int lenght)
{
  len = strlen(str);  // Вычисление длины строки

  if(len >= 0 && len < 256){ // Проверка диапазона, должен быть меньше 255
    p = new char[len + 1]; // Выделение памяти в 255 байт плюс завершающий символ
    assert(p != 0);  // Проверка выделения памяти
    strcpy(p, str);  // Копирование...
   }
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт...
    cout<<" Error! Lenght > 256 bytes!";
}
// Печать объекта, для проверки----------------------------------------------
void StrType::Print()
{
  cout<<endl;
  cout<<" String (char *p): "<<getString()<<endl; // Печать строки...
  cout<<" Lenght (int len) = "<<getLen()<<endl;   // Печать длины строки...
}
// Демонстрация композиции. Тестирование-------------------------------------
int main()
{
   int z;
   StrType s1,                                                // 1-й объект, без инициализации...
           s2("Anna Kanaeva - programming and diasyner", 40); // 2-й объект, инициализирован...

   s1.Print(); // Печать объекта...
   s2.Print(); // Печать объекта...
   cin>>z;
        return 0;
}
//---------------------------------------------------------------------------

Задача "Д")
читать дальше »
Код: Выделить весь код
// Определить функцию с целым аргументом, который по умолчанию равен нулю,
// которая выводит строку, что сохраняеться в классе, на экран:
// когда ей не передаётся ни одного параметра, тогда функция выводит всю строку;
// если передаеться какое то число, которое не равно нулю, тогда эта функция
// выводит столько элементов строки, согласно числу, которое было передано функции.
// Показать что перегруженные конструкторы и функция работает так как нужно.
// А как нужно?!
#include <iostream.h>
using std::cout;
using std::cin;
using std::endl;

#include <cstring.h>
#include <cassert>
#include <stdarg.h>
#include <stdio.h>

class StrType{ // Класс StrType
public:
   StrType(); // Конструктор без аргументов
   StrType(char *s, int l); // Конструктор с аргументами
   int getLen() const { return len; };   // Получение длины строки
   char *getString() { return p; };      // Получение строки
   void Function(int n = 1, ...);
   void Print();    // Печать объекта, вывод значений...
private:
   char *p;   // Строка
   int len;   // Длина строки
};
// Конструктор без параметров, с вводом с клавиатуры--------------------------
StrType::StrType()
{
  char sTemp[255] = ""; // Временный символьный массив

  len = 255;
  p = new char[255 + 1]; // Выделение памяти в 255 байт плюс завершающий символ
  assert(p != 0);  // Проверка выделения памяти

  cout<<" Enter String: ";  // Предложение ввода
  cin.getline(sTemp, 255, '\n'); // Ввод строки символов

  strcpy(p, sTemp);  // Копирование строки символов в "р"
  delete []sTemp;
}
// Конструктор с параметрами, без ввода с клавиатуры--------------------------
StrType::StrType(char *str, int lenght)
{
  len = strlen(str);  // Вычисление длины строки

  if(len >= 0 && len < 256){ // Проверка диапазона, должен быть меньше 255
    p = new char[len + 1]; // Выделение памяти в 255 байт плюс завершающий символ
    assert(p != 0);  // Проверка выделения памяти
    strcpy(p, str);  // Копирование...
   }
  else   // Вывод ошибки если диапазон массива меньше нуля и больше 256 байт...
    cout<<" Error! Lenght > 256 bytes!";
}
// Печать объекта, для проверки----------------------------------------------
void StrType::Print()
{
  cout<<endl;
  cout<<" String (char *p): "<<getString()<<endl;
  cout<<" Lenght (int len) = "<<getLen()<<endl;
}
// Функция с перечислимыми параметрами---------------------------------------
void StrType::Function(int n, ...)
{
//  int i = 0;
//  va_list List1;
  //va_start(List1, i);
//  i = va_arg(List1, char *);
  cout<<"\n\n Value parameters len for Function() = "<<n<<endl;

  for(int i = 0; i < n; i++)
    cout<<*p++;

  //va_end(List1);
}
// Демонстрация композиции. Тестирование-------------------------------------
int main()
{
   int z;
   StrType s1,                                                // 1-й объект...
           s2("Anna Kanaeva - programmist and disayner", 40); // 2-й объект...

   s1.Print(); // Печать объекта...
   s2.Print(); // Печать объекта...

   s2.Function(35); // Число, сколько символов вывести для 1-го объекта
   s1.Function(8);  // Число, сколько символов вывести для 2-го объекта

   cin>>z;
        return 0;
}
//---------------------------------------------------------------------------

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Последний раз редактировалось Drongo, 25-04-2008 в 14:56.

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:23, 12-12-2007 | #14

Название темы: Помогите решить