Программа с массивами
|
|
nosov_mikkail | Дата: Вторник, 25.04.2017, 00:00 | Сообщение # 1 |
НовичЁк
Группа: Проверенные
Сообщений: 2
Статус: Оффлайн
| ПОМОГИТЕ С ПРОГРАММОЙ НА С++ Задать A и B как параметры функции: а) сформировать двумерный массив из: -произведений элементов чётных столбцов исходной матрицы a, находящихся в пределах: A < a[i][j] <=B - (первая строка нового массива); -количества таких элементов в каждом столбце - (вторая строка нового массива); б) определить сумму произведений сформированного массива и общее количество таких элементов столбцов;
Сообщение отредактировал nosov_mikkail - Вторник, 25.04.2017, 00:14 |
|
| |
Алексей | Дата: Вторник, 25.04.2017, 00:57 | Сообщение # 2 |
Продвигающийся
Группа: Администраторы
Сообщений: 324
Статус: Оффлайн
| В задании сказано четные столбцы, но вопрос четные по восприятию человека или по языку программирования. Человек считает от единицы, а с++ от нуля. Тут уже думай сам. Я делаю по человеческому счету, все-таки с программой человек будет работать, а не компьютер. Еще можешь, что не будет производиться проверка флага 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
Статус: Оффлайн
| 1.Дан массив, содержащий сведения о студентах некоторой группы: ФИО, оценки по пяти экзаменационным дисциплинам. Вывести сначала студентов, получающих повышенную стипендию, затем обычную, и, наконец, без стипендии. Организовать поиск студента по фамилии с выводом информации о нем. (использование структур) 2.Точку в пространстве можно представить тремя координатами X, Y, Z. Дан массив из N точек. Сформировать стек тех точек, которые лежат справа от плоскости X=6. (использование динамических переменных)
Помодитетеще при с этим, пожалуйста.
|
|
| |
Алексей | Дата: Понедельник, 01.05.2017, 11:47 | Сообщение # 4 |
Продвигающийся
Группа: Администраторы
Сообщений: 324
Статус: Оффлайн
| Цитата 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
|
|
| |