Задачи: Несколько логических задачек

Тема в разделе "C/C++/C#", создана пользователем Dual, 31 май 2010.

Статус темы:
Закрыта.
  1. Dual

    Dual Гость

    Здраствуйте все. Надеюсь на вашу помощь. Нужно решить пару задач.
    1. Двузначное число втрое больше суммы своих чисел, а квадрат этой суммы равен утроенному начальному числу. Найти это число.
    2. Население города каждый год увеличивается на 1(дробь)40 от существующего. Через сколько лет население утроится.
    3. Найти наибольшую и наименьшую цифры в записи данного натурального числа.
    4. Написать программу для нахождения суммы большего и меньшего из трех чисел. Поиск минимума и максимума оформить в виде функции.
    5. В массиве действительных чисел а1,а2,...,аN, есть только положительные и отрицательные элементы. Вычислить произведение отрицательных элементов P1, и произведение положительных элементов P2. Сравнить модуль P2 с модулем Р1, указать, какое из произведений по модулю больше.
    6. Массив имеет размер 30 элементов. Все элементы формируются с помощью генератора случайных чисел и лежат в интервале от 1 до 99. Отсортировать массив по убыванию.
    7. Дан текст в виде математической записи. Заменить "+" на "-", "-" на "*", "*" на "+".
    8. Составить программу, которая вводит строку с клавиатуры; признак окончания ввода - нажатие клавиши Enter, шифрует введенный текст в файл на диске по определенному алгоритму. программа может считать эту строку из файла и далее дешифрует текст, выводит его на экран и записывает его опять в выходной файл.
    Меню программы:
    Сформировать с клавиатуры строку текста и записать в файл shifr.txt
    Считать строку и распечатать
    Зашифровать
    Расшифровать.
    Алгоритмы шифровки:
    Каждая бука от а до z заменяется на следующую по алфавиту,а z заменяется на а.
    Очень надеюсь на вашу помощь
     
  2. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Перемещенно из темы с мусором
     
  3. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (C++):
    /*
    1. Двузначное число втрое больше суммы своих чисел, а квадрат этой суммы равен утроенному начальному числу. Найти это число.
    2. Население города каждый год увеличивается на 1(дробь)40 от существующего. Через сколько лет население утроится.
    3. Найти наибольшую и наименьшую цифры в записи данного натурального числа.
    */

    /*
    codeby.net
    Autor: DarkKnight125 (Denis Goncharov)
    */

    #include <iostream>

    using namespace std;

    void main(void)
    {
    setlocale(LC_ALL,"Russian");

    //1. Двузначное число втрое больше суммы своих чисел, а квадрат этой суммы равен утроенному начальному числу. Найти это число.
    cout<< "1. Двузначное число втрое больше суммы своих чисел, а квадрат этой суммы равен утроенному начальному числу. Найти это число." << endl;
    int dvCh = 0; //Наше число
    for (int i = 10; i<100; i++) //Обойдем все двухзначние числа [10..99];
    {
    int Sum = i%10 + i/10; //Это сумма числе двухзначного числа (остаток от деление на 10 + число полученное целоч. делением на 10
    if ((i == 3*Sum) && (Sum*Sum == 3*i)) // Это наши условие ЧИСЛО = 3*SUM AND SUM^2 == 3*ЧИСЛО
    {
    //Как только условие соответствует то выведим его и выдим из цикла
    cout<< "Данное число = " << i << endl << endl;
    break;
    }
    }

    //2. Население города каждый год увеличивается на 1(дробь)40 от существующего. Через сколько лет население утроится.
    cout<< "2. Население города каждый год увеличивается на 1(дробь)40 от существующего. Через сколько лет население утроится." << endl;
    double dAll = 0.0; //Текущее приращение
    double AllNass = 1.0; //Население текущее
    int YearCnt = 0; //Счетчик лет
    while (AllNass < 3) //Пока Население будет < 3 (в три раза больше первонач)
    {
    dAll = AllNass/ 40.0; //Найдем приращение
    AllNass+=dAll; //Новое значение населения
    YearCnt++; //Увеличим счетчик года
    }
    cout<< "Утроится через " << YearCnt << "лет" << endl << endl;

    //3. Найти наибольшую и наименьшую цифры в записи данного натурального числа.
    cout<< "3. Найти наибольшую и наименьшую цифры в записи данного натурального числа." << endl;
    int Natur; //Наше вводимое натуральное число
    int cfMin = 10; //Минимальная цифра
    int cfMax = -1; //Максимальная цифра
    cout << "Введите натуральное число : ";
    cin >> Natur;
    while (Natur > 0)
    {
    int cif = Natur % 10; //Текущая цифра полученная при остатке от деления на 10
    if (cif > cfMax)
    cfMax = cif;
    if (cif < cfMin)
    cfMin = cif;

    Natur /= 10; //Разделем целочисленным делением на 10 введенную цифру
    }
    cout << "Минимальная цифра в натуальном числе = " << cfMin << endl;
    cout << "Максимальная цифра в натуальном числе = " << cfMax << endl;

    }
     

    Вложения:

    • logicz.jpg
      logicz.jpg
      Размер файла:
      65,7 КБ
      Просмотров:
      19
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (C++):
    /*
    4. Написать программу для нахождения суммы большего и меньшего из трех чисел. Поиск минимума и максимума оформить в виде функции.
    5. В массиве действительных чисел а1,а2,...,аN, есть только положительные и отрицательные элементы. Вычислить произведение отрицательных элементов P1, и произведение положительных элементов P2. Сравнить модуль P2 с модулем Р1, указать, какое из произведений по модулю больше.
    6. Массив имеет размер 30 элементов. Все элементы формируются с помощью генератора случайных чисел и лежат в интервале от 1 до 99. Отсортировать массив по убыванию.
    7. Дан текст в виде математической записи. Заменить "+" на "-", "-" на "*", "*" на "+".
    */

    /*
    codeby.net
    Autor: DarkKnight125 (Denis Goncharov)
    */

    #include <iostream>
    #include <time.h>

    using namespace std;

    //Функция нахождения мин. значения (задача 4)
    double MinF(double a, double b, double c)
    {
    double Result = a;
    if (Result > b)
    Result = b;
    if (Result > c)
    Result = c;
    return Result;
    }
    //Функция нахождения Макс. значения (задача 4)
    double MaxF(double a, double b, double c)
    {
    double Result = a;
    if (Result < b)
    Result = b;
    if (Result < c)
    Result = c;
    return Result;
    }

    //Основная функция
    void main(void)
    {
    setlocale(LC_ALL,"Russian");

    //4. Написать программу для нахождения суммы большего и меньшего из трех чисел. Поиск минимума и максимума оформить в виде функции.
    cout<< "4. Написать программу для нахождения суммы большего и меньшего из трех чисел. Поиск минимума и максимума оформить в виде функции." << endl;
    //Тут конечно лучше массивами оформлять, и функция бы была красивее, но из задания явно видно про 3 переменные...
    double a, b, c;
    cout << "Введите первое число a = ";
    cin >> a;
    cout << "Введите второе число b = ";
    cin >> b;
    cout << "Введите третье число c = ";
    cin >> c;
    cout << "Результат : " << MaxF(a,b,c) + MinF(a,b,c) << endl;
    cout << endl << endl;
    /*
    -------------------------------------------------------------------------------------------------
    */


    //5. В массиве действительных чисел а1,а2,...,аN, есть только положительные и отрицательные элементы.
    //Вычислить произведение отрицательных элементов P1, и произведение положительных элементов P2.
    //Сравнить модуль P2 с модулем Р1, указать, какое из произведений по модулю больше.
    cout<< "5. В массиве действительных чисел а1,а2,...,аN, есть только положительные и отрицательные элементы." << endl;
    cout<< "Вычислить произведение отрицательных элементов P1, и произведение положительных элементов P2." << endl;
    cout<< "Написать программу для нахождения суммы большего и меньшего из трех чисел. Поиск минимума и максимума оформить в виде функции." << endl;
    int *Arr; //Наш массив действительных чисел
    int ArrSize; //Размер массива
    long P1 = 1; //Произведение отрицательных элементов
    long P2 = 1; //Произведение положит. элементов
    srand(time(NULL)); //Инициализация генератора случ. величины
    cout << "Введите кол-во чисел ArrSize = ";
    cin >> ArrSize; //Введем кол-во элементов массива

    Arr = new int[ArrSize]; //Динамически выделим память под элементы
    //Заполним массив только полож. и только отрицательными случ. величинами
    for (int i = 0; i < ArrSize; i++)
    {
    Arr[i] = (rand()%99+1) * (rand()%2?1:-1); //Сгенерируем значение от 1..99 и домножим его или на -1 или на 1
    cout << Arr[i] << " "; //Выведим на экран массив
    //Сразу будем находить произведение
    if (Arr[i] < 0)
    P1 *= Arr[i]; //Если отриц. элемент
    else P2 *= Arr[i]; //Если положительный
    }
    cout << endl;
    cout << "Произведение отриц. элементов P1 = " << P1 << endl;
    cout << "Произведение полож. элементов P2 = " << P2 << endl;
    //Проанализируем модули
    if (abs(P1) > abs(P2)) //Если |P1| > |P2|
    cout << "|P1| > |P2|";
    else if (abs(P1) < abs(P2)) // Иначе если |P1| < |P2|
    cout << "|P1| < |P2|";
    else cout << "|P1| = |P2|"; //Иначе (тоесть они равны)
    cout << endl << endl;
    /*
    -------------------------------------------------------------------------------------------------
    */


    //6. Массив имеет размер 30 элементов.
    //Все элементы формируются с помощью генератора случайных чисел и лежат в интервале от 1 до 99. Отсортировать массив по убыванию.
    cout<<"6. Массив имеет размер 30 элементов. " << endl;
    cout<<"Все элементы формируются с помощью генератора случайных чисел и лежат в интервале от 1 до 99. Отсортировать массив по убыванию." << endl;
    int Massiv[30]; // Наш массив
    //Заполним его случ. величинами от 1 до 99
    cout<< "Сходный массив : " << endl;
    for (int i =0; i< 30; i++)
    {
    Massiv[i] = rand()%99 +1; //Сгенерируем значение получается так [(0..98) + 1]
    cout << Massiv[i] << " "; //
    }
    //Отсортируем по убыванию
    cout << endl << "Отсортированные массив : "<< endl;
    for (int i = 0; i< 30; i++)
    {
    for (int j = i+1; j<30; j++)
    {
    if (Massiv[i] < Massiv[j])
    {
    int Temp = Massiv[i];
    Massiv[i] = Massiv[j];
    Massiv[j] = Temp;
    }
    }
    cout << Massiv[i] << " ";
    }
    cout<< endl << endl;
    /*
    -------------------------------------------------------------------------------------------------
    */

    //7. Дан текст в виде математической записи. Заменить "+" на "-", "-" на "*", "*" на "+".
    cout<< "7. Дан текст в виде математической записи. Заменить \"+\" на \"-\", \"-\" на \"*\", \"*\" на \"+\"." << endl;
    char buffer[1024]; //Вводимая строка
    cout << "Введите строку : ";
    getchar();
    cin.getline(buffer,1023);
    //Обойдем всю строку циклом
    for (int i = 0; i< strlen(buffer); i++)
    {
    //Оператором выбора поменяем все по усл. задачи
    switch (buffer[i])
    {
    case '+':
    buffer[i] = '-';
    break;
    case '-':
    buffer[i] = '*';
    break;
    case '*':
    buffer[i] = '+';
    break;
    default:
    break;
    //Ну по дефолту ничего не делаем
    }
    }
    cout << "Результат : " << buffer << endl;

    }
     

    Вложения:

    • logic_good.jpg
      logic_good.jpg
      Размер файла:
      129,4 КБ
      Просмотров:
      16
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей