Write a program that finds the greatest sum of three adjacent numbers in any dir
ID: 3624698 • Letter: W
Question
Write a program that finds the greatest sum of three adjacent numbers in any direction (up, down, left, right, or diagonally) in a 20x20 grid of numbers.
All input data must be obtained from the stdin prompt. You can feed in the data from a file by using input redirection. The input file will contain the matrix of numbers from the top left to bottom right.
Example input file: (input.txt)
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08
49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00
81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65
52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91
22 31 16 71 51 67 63 89 41 92 36 54 22 40 40 28 66 33 13 80
24 47 32 60 99 03 45 02 44 75 33 53 78 36 84 20 35 17 12 50
32 98 81 28 64 23 67 10 26 38 40 67 59 54 70 66 18 38 64 70
67 26 20 68 02 62 12 20 95 63 94 39 63 08 40 91 66 49 94 21
24 55 58 05 66 73 99 26 97 17 78 78 96 83 14 88 34 89 63 72
21 36 23 09 75 00 76 44 20 45 35 14 00 61 33 97 34 31 33 95
78 17 53 28 22 75 31 67 15 94 03 80 04 62 16 14 09 53 56 92
16 39 05 42 96 35 31 47 55 58 88 24 00 17 54 24 36 29 85 57
86 56 00 48 35 71 89 07 05 44 44 37 44 60 21 58 51 54 17 58
19 80 81 68 05 94 47 69 28 73 92 13 86 52 17 77 04 89 55 40
04 52 08 83 97 35 99 16 07 97 57 32 16 26 26 79 33 27 98 66
88 36 68 87 57 62 20 72 03 46 33 67 46 55 12 32 63 93 53 69
04 42 16 73 38 25 39 11 24 94 72 18 08 46 29 32 40 62 76 36
20 69 36 41 72 30 23 88 34 62 99 69 82 67 59 85 74 04 36 16
20 73 35 29 78 31 90 01 74 31 49 71 48 86 81 16 23 57 05 54
01 70 54 71 83 51 54 69 16 92 33 48 61 43 52 01 89 19 67 48
---------------------------------------------------------------------------------------------------------
1) The program should be purely Object Oriented containing a constructor, destructor and other helper functions.
2) The data members must be private and accessible only through getter and setter functions (accessors and mutators).
3) No global variables may be used. The 2D data grid must be passed in to a function using pointers.
4) The program should contain a function to obtain user input (this should not be the constructor), a function to display output, and at least one other function to perform the calculations.
---------------------------------------------------------------------------------------------------------
For this program, i have an intArray.h, intArray.cpp, and main.cpp
This is what I have so far:
---------------------------------------------------------------------------------------------------------
intArray.h
#ifndef INT_ARRAY_H
#define INT_ARRAY_H
#include <iostream>
#include <cstdlib
#include <iomanip>
using namespace std;
class intArray{
//variables
int size[20][20];
int* data;
public:
//constructor and destructor
intArray();
~intArray();
//getters
int getSize();
int getValue(int column, int row, int value);
//setters
//void setValue(int value, int index);
//read&display
void display();
void read();
};
#endif //INT_ARRAY_H
---------------------------------------------------------------------------------------------------------
intArray.cpp
#include
#include "intArray.h"
using namespace std;
//const int num = 20;
int width = 20;
int height = 20
//constructor
intArray::intArray(){
int size [height][width];
data = new int [size];
if (data == NULL){
cout << "ERROR: Insufficient Memory" << endl;
exit(1);
}
else {
for(int i = 0; i < height; ++i){
for(int j = 0; j < weight; ++j){
data[i][j] = 0;
}
}
}
}
//destructor
intArray::~intArray(){
if(data != NULL){
delete [] data;
}
}
//display
void intArray::display(){
for(int i = 0; i < height; i++){
for (int j = 0; j < weight; j++){
cout << size[i][j] << " ";
}
cout << endl;
}
}
//read
void intArray::read(){
for(int i = 0; i < height; i++)
for (int j = 0; j < weight; j++)
cin >> size[i][j];
}
//getters
int intArray::getSize(){
return(size);
}
int intArray:: getValue(int column, int row, int value){
for(i = 0; i < height; ++i){
for(j = 0; j < weight; ++j){
}
}
}
---------------------------------------------------------------------------------------------------------
main.cpp
#include <iostream>
#include <fstream>
#include "intArray.h"
using namespace std;
int main(int argc, char **argv){
intArray myArray;
ifstream inFile;
inFile.open("input.txt");
if (inFile.fail()){
cout << "ERROR!!! Input file cannot be opened. Please try again." << endl;
exit(0);
}
else{
cout << "File opened!";
}
cout << endl;
return(0);
}
---------------------------------------------------------------------------------------------------------
PLEASE HELP! I don't know what to do for main.cpp.. and also I'm not sure what to type for intArray.cpp.
Any help would be much appreciated! and rated!!! :)
#include
#include "intArray.h"
using namespace std;
//const int num = 20;
int width = 20;
int height = 20
//constructor
intArray::intArray(){
int size [height][width];
data = new int [size];
if (data == NULL){
cout << "ERROR: Insufficient Memory" << endl;
exit(1);
}
else {
for(int i = 0; i < height; ++i){
for(int j = 0; j < weight; ++j){
data[i][j] = 0;
}
}
}
}
//destructor
intArray::~intArray(){
if(data != NULL){
delete [] data;
}
}
//display
void intArray::display(){
for(int i = 0; i < height; i++){
for (int j = 0; j < weight; j++){
cout << size[i][j] << " ";
}
cout << endl;
}
}
//read
void intArray::read(){
for(int i = 0; i < height; i++)
for (int j = 0; j < weight; j++)
cin >> size[i][j];
}
//getters
int intArray::getSize(){
return(size);
}
int intArray:: getValue(int column, int row, int value){
for(i = 0; i < height; ++i){
for(j = 0; j < weight; ++j){
}
}
}
Explanation / Answer
After I have worked on this code for 2 hours. I would like to state that it compiles, runs and is perfectly accurate up to the fact that i do not know how to input from files. Thus, i would like to state that all you have left to do is write a sufficient file input.
I have written a lot of comments.
intArray.h
#ifndef INT_ARRAY_H
#define INT_ARRAY_H
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <iomanip>
using namespace std;
class intArray{
//variables
private:
int size[20][20];
int data[20][20];
//int data[column][row];
public:
//constructor and destructor
intArray();
~intArray();
//getters
int getSize();
int getValue(int column, int row, int value);
//process
int process();
//setters
//void setValue(int value, int index);
//read&display
void display();
void read();
};
#endif //INT_ARRAY_H
intArray.cpp
#ifndef INT_ARRAY_C
#define INT_ARRAY_C
//#include
#include "intArray.h"
using namespace std;
//const int num = 20;
int column =20;
int row =20;
//constructor
intArray::intArray(){
//int size [column][row];
//data = size;
if (data == NULL){
cout << "ERROR: Insufficient Memory" << endl;
exit(1);
}
else {
for(int i = 0; i < column; ++i){
for(int j = 0; j < row; ++j){
data[i][j] = 0;
}
}
}
}
//destructor
intArray::~intArray(){
if(data != NULL){
delete [] data;
}
}
//display
void intArray::display(){
for(int i = 0; i < row; i++){
for (int j = 0; j < column; j++){
cout << size[j][i] << " ";
}
cout << endl;
}
}
//Processing of information
int intArray::process(){
int processed = 0, temp = 0 ;
for (int i = column; i < column * (row - 1); i++){ // start on second line, go to penultimate line
if(i%column > 0 && i%column < (column -1)) //tests if inbetween second and penultimate column
{
if ((temp = data[i%column][i/row]+data[i%column-1][i/row]
+data[i%column+1][i/row]) > processed) //horizontal test
{
processed = temp;
}
if ((temp = data[i%column][i/row]+data[i%column][i/row-1]
+data[i%column][i/row+1]) > processed) //vertical test
{
processed = temp;
}
if ((temp = data[i%column][i/row]+data[i%column-1][i/row-1]
+data[i%column+1][i/row+1]) > processed) //forward slash test
{
processed = temp;
}
if ((temp = data[i%column][i/row]+data[i%column+1][i/row-1]
+data[i%column-1][i/row+1]) > processed) //backslash test
{
processed = temp;
}
}
}
return processed;
}
//read
void intArray::read(){ //redone to take manual, or file input
//char* input;
//cout << "Please input the name of file you wish to input(input ""none"" for manual): " ; // this will prompt user for file
// cin >> input; // this reads user input
//if(input != "none"){
ifstream inFile;
//inFile.open(input); //opens file specified by the user
inFile.open("input.txt"); //opens file specified by the user
if (inFile.fail()){
cout << "ERROR!!! Input file cannot be opened. Please try again." << endl;
exit(0);
}
else{
cout << "File opened!";
}
char temp[column * 3]; //input from file
int temp2, v = 0;
/*for(int x = 0 ; x < row; x++){
for(int j = 0 ; j < column - 1 ; j++) // get each file line indivualy
{if(!inFile.getline(temp, 100, ' ').eof())
{
for(int i = 0 ; temp[i];i ++){
temp2 = 10*temp2+ temp[i] - '0';
}
data[v%column][v/row] = temp2 ; //assigns value based on position
v++ ; //increment for repetition
}
}
if(!inFile.getline(temp, 100).eof()){
for(int i = 0 ; temp[i];i ++){
temp2 = 10*temp2+ temp[i] - '0';
}
data[v%column][v/row] = temp2 ; //assigns value based on position
v++ ;
}
} */ //old
while (!inFile.getline(temp, 100).eof()){
for (int i = 0; i < column; i++){
data[v%column][v/row] = temp[i*3] *10 + temp[i*3 +1];
}
}
/*}/*else{
for(int i = 0; i < row; i++) //select row
for (int j = 0; j < column; j++) //select column
cin >> size[j][i];
}*/
cout << "Input Taken";
}
//getters
int intArray::getSize(){
return(column * row);
}
int intArray:: getValue(int column2, int row2, int value){
/*for(i = 0; i < height; ++i){
for(j = 0; j < weight; ++j){
}
}*/ //superfluous
return data[column2][row2];
}
#endif
main.cpp
#include <iostream>
#include <fstream>
#include "intArray.h"
using namespace std;
int main(int argc, char **argv){
intArray myArray;
myArray.read();
int answer = myArray.process();
//myArray.display();
cout << endl << "Highest combination of 3 adjacent numbers is: " << answer <<endl;
/*ifstream inFile;
inFile.open("input.txt");
if (inFile.fail()){
cout << "ERROR!!! Input file cannot be opened. Please try again." << endl;
exit(0);
}
else{
cout << "File opened!";
}*/ // you don't need this here
cout << endl;
int quit;
cin >> quit;
return(0);
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.