[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Компьютеры » Программирование » C++, C# » Программа с массивами (на С++)
Программа с массивами
nosov_mikkailДата: Вторник, 25.04.2017, 00:00 | Сообщение # 1
НовичЁк
Группа: Проверенные
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Оффлайн
ПОМОГИТЕ С ПРОГРАММОЙ НА С++
Задать A и B как параметры функции:
а) сформировать двумерный массив из:
-произведений элементов чётных столбцов исходной матрицы a, находящихся в пределах: A < a[i][j] <=B - (первая строка нового массива);
-количества таких элементов в каждом столбце - (вторая строка нового массива);
б) определить сумму произведений сформированного массива и общее количество таких элементов столбцов;


Сообщение отредактировал nosov_mikkail - Вторник, 25.04.2017, 00:14
 
АлексейДата: Вторник, 25.04.2017, 00:57 | Сообщение # 2
Продвигающийся
Группа: Администраторы
Сообщений: 318
Награды: 4
Репутация: 1
Статус: Оффлайн
В задании сказано четные столбцы, но вопрос четные по восприятию человека или по языку программирования. Человек считает от единицы, а с++ от нуля. Тут уже думай сам. Я делаю по человеческому счету, все-таки с программой человек будет работать, а не компьютер.
Еще можешь, что не будет производиться проверка флага first, для этого заполни первую строку результирующего массива единицами, а вторую нулями и сразу считай в него. В этом случае, когда ты будешь выводить, то столбцы, которые не содержали удовлетворяющих условию элементов будут выводиться как 1, чтобы это решить можно сделать еще один массив типа bool и там устроить проверку или то, что придумаешь ты, если конечно придумаешь.

Код

#include <iostream>

using namespace std;

/*Задать A и B как параметры функции:
а) сформировать двумерный массив из:
-произведений элементов чётных столбцов исходной матрицы a, находящихся в пределах: A < a <=B - (первая строка нового массива);
-количества таких элементов в каждом столбце - (вторая строка нового массива);
б) определить сумму произведений сформированного массива и общее количество таких элементов столбцов;*/

int main()
{
    int n1, n2;
    printf("Enter the number of elements horizontally: ");
    scanf("%d",&n2);
    printf("Enter the number of elements vertically: ");
    scanf("%d",&n1);
    printf("\n");
    int** matrix = new int*[n1];
    for (int i=0;i<n1;i++)
    {
        matrix[i] = new int[n2];
        for (int j=0;j<n2;j++)
        {
            printf("Element[%d][%d]",i+1,j+1);
            scanf("%d",&matrix[i][j]);
        }
    }
    int a,b;
    printf("Enter A: "); scanf("%d",&a);
    printf("Enter B: "); scanf("%d",&b);
    /*Если я правильно понимаю вторая часть пункта "a" касается тоже четных столбцов...*/
    int n3 = n2 / 2;
    int **matrix2 = new int*[2];
    for (int i=0;i<2;i++)
    {
        matrix2[i] = new int[n3];
        for (int j=0;j<n3;j++)
            matrix2[i][j] = 0;
    }
    int sum1 = 0, sum2 = 0;
    /*Тут поступай в зависимости от того, что от тебя хотят.
    В задании сказано четные столбцы, но вопрос четные по восприятию человека
    или по языку программирования. Человек считает от единицы, а с++ от нуля.
    Тут уже думай сам. Я делаю по человеческому счету, все-таки с программой человек
    будет работать, а не компьютер*/
    for (int j=1,k=0;j<n2;j+=2,k++)
    {
        bool first = true;
        int count;
        int product_nums;
        for (int i=0;i<n1;i++)
        {
            int element = matrix[i][j];
            if (element > a && element <= b)
            {
                if (first)
                {
                    product_nums = element;
                    count = 1;
                    first = false;
                }
                else
                {
                    product_nums *= element;
                    count++;
                }
            }
        }
        if (first == false)
        {
            matrix2[0][k] = product_nums;
            matrix2[1][k] = count;
            sum1 += product_nums;
            sum2 += count;
        }
    }
    printf("\n--------------\n");
    printf("Results matrix:\n");
    for (int i=0;i<2;i++)
    {
        for (int j=0;j<n3;j++)
        {
            printf("%d ",matrix2[i][j]);
        }
        printf("\n");
    }
    printf("Products sum = %d\n",sum1);
    printf("Counts sum = %d\n",sum2);
    return 1;
}
 
nosov_mikkailДата: Среда, 26.04.2017, 01:51 | Сообщение # 3
НовичЁк
Группа: Проверенные
Сообщений: 2
Награды: 0
Репутация: 0
Статус: Оффлайн
1.Дан массив, содержащий сведения о студентах некоторой группы: ФИО, оценки по пяти экзаменационным дисциплинам. Вывести сначала студентов, получающих повышенную стипендию, затем обычную, и, наконец, без стипендии. Организовать поиск студента по фамилии с выводом информации о нем. (использование структур)
2.Точку в пространстве можно представить тремя координатами X, Y, Z. Дан массив из N точек. Сформировать стек тех точек, которые лежат справа от плоскости X=6. (использование динамических переменных)

Помодитетеще при с этим, пожалуйста.
 
АлексейДата: Понедельник, 01.05.2017, 11:47 | Сообщение # 4
Продвигающийся
Группа: Администраторы
Сообщений: 318
Награды: 4
Репутация: 1
Статус: Оффлайн
Цитата nosov_mikkail ()
1.Дан массив, содержащий сведения о студентах некоторой группы: ФИО, оценки по пяти экзаменационным дисциплинам. Вывести сначала студентов, получающих повышенную стипендию, затем обычную, и, наконец, без стипендии. Организовать поиск студента по фамилии с выводом информации о нем. (использование структур)


main.cpp
Код
#include <stdio.h>
#include <stdlib.h>
#include <cmath>
#include <iostream>
#include <fstream>

#include "student.h"

int getChiselFromChar(char value)
{
    switch (value) {
    case '1':
        return 1;
    case '2':
        return 2;
    case '3':
        return 3;
    case '4':
        return 4;
    case '5':
        return 5;
    case '6':
        return 6;
    case '7':
        return 7;
    case '8':
        return 8;
    case '9':
        return 9;
    default:
        return 0;
    }
}

int getIntFromString(string str)
{
    int result = getChiselFromChar(str[str.length()-1]);
    for (int i=str.length()-2,k=1;i>=0;i--,k++)
    {
        result += getChiselFromChar(str[i]) * pow(10,k);
    }
    return result;
}

int main()
{
    ifstream myfile("input.txt");
    string tmp;
    getline(myfile,tmp);
    int count = getIntFromString(tmp);
    Student **students = new Student*[count];
    for (int i=0;i<count;i++)
    {
        string line;
        getline(myfile,line);
        int j = 0;
        string surname = "";
        while (line[j] != ' ') {
            surname += line[j];
            j++;
        }
        string name = "";
        while (line[j] != ' ') {
            name += line[j];
            j++;
        }
        int rating1, rating2, rating3, rating4, rating5;
        tmp = "";
        while (line[j] != ' ') {
            tmp += line[j];
            j++;
        }
        rating1 = getIntFromString(tmp);
        tmp = "";
        while (line[j] != ' ') {
            tmp += line[j];
            j++;
        }
        rating2 = getIntFromString(tmp);
        tmp = "";
        while (line[j] != ' ') {
            tmp += line[j];
            j++;
        }
        rating3 = getIntFromString(tmp);
        tmp = "";
        while (line[j] != ' ') {
            tmp += line[j];
            j++;
        }
        rating4 = getIntFromString(tmp);
        tmp = "";
        while (line[j] != ' ') {
            tmp += line[j];
            j++;
        }
        rating5 = getIntFromString(tmp);
        students[i] = new Student(surname,name,rating1,rating2,rating3,rating4,rating5);
    }
    string show = "show sort";
    string find = "find ";
    while (true) {
        std::cout << "Enter the command: ";
        std::cin >> tmp;
        if (tmp == "exit")
            break;
        bool ok = false;
        if (tmp.length() == show.length())
        {
            ok = true;
            for (int i=0;i<show.length();i++)
            {
                if (tmp[i] != show[i])
                {
                    ok = false;
                    break;
                }
            }
            if (ok)
            {
                for (int i=0;i<count;i++)
                    if (students[i]->hightGrant())
                        students[i]->write();
                for (int i=0;i<count;i++)
                    if (students[i]->normalGrant())
                        students[i]->write();
                for (int i=0;i<count;i++)
                    if (students[i]->notGrant())
                        students[i]->write();
            }
        }
        if (tmp.length() > find.length())
        {
            ok = true;
            for (int i=0;i<find.length();i++)
                if (tmp[i] != find[i])
                {
                    ok = false;
                    break;
                }
            if (ok)
            {
                string surname = "";
                for (int i=find.length();i<tmp.length();i++)
                    surname += tmp[i];
                ok = false;
                for (int i=0;i<count;i++)
                    if (surname == students[i]->surname)
                    {
                        students[i]->write();
                        ok = true;
                        break;
                    }
                if (ok == false)
                {
                    std::cout << "Surname not find" << endl;
                }
                ok = true;
            }
        }
        if (ok == false)
        {
            std::cout << "Command not find" << endl;
        }
    }
    return 0;
}


student.h
Код
#ifndef STUDENT_H
#define STUDENT_H

#include <stdlib.h>
#include <string>
#include <iostream>
#include <fstream>

using namespace std;

struct Student
{
public:
    string surname;
    string name;
    int rating1, rating2, rating3, rating4, rating5;
public:
    Student(string surname, string name, int rating1, int rating2,
            int rating3, int rating4, int rating5);
    bool hightGrant();
    bool normalGrant();
    bool notGrant();
    void write();
};

#endif // STUDENT_H


student.cpp
Код
#include "student.h"

Student::Student(string surname, string name, int rating1, int rating2, int rating3, int rating4, int rating5)
{
    this->surname = surname;
    this->name = name;
    this->rating1 = rating1;
    this->rating2 = rating2;
    this->rating3 = rating3;
    this->rating4 = rating4;
    this->rating5 = rating5;
}

bool Student::hightGrant()
{
    return rating1 == 5 && rating2 == 5 && rating3 == 5 && rating4 == 5 && rating5 == 5;
}

bool Student::normalGrant()
{
    return hightGrant() == false && rating1 >= 4 && rating2 >= 4 && rating3 >= 4 && rating4 >= 4 && rating5 >= 4;
}

bool Student::notGrant()
{
    return rating1 < 4 || rating2 < 4 || rating3 < 4 || rating4 < 4 || rating5 < 4;
}

void Student::write()
{
    std::cout << surname << " " << name << " " << rating1 << " " << rating2 << " " << rating3 << " " << rating4 << " " << rating5 << endl;
}


Входной файл с данными выглядит так
2
Иванов Иван 4 4 5 4 4
Романова Мария 5 5 5 5 5
 
Форум » Компьютеры » Программирование » C++, C# » Программа с массивами (на С++)
  • Страница 1 из 1
  • 1
Поиск: