2017-05-05 4 views
-2

Ich war in der Lage, eine Liste von Array in einer 2D-Tabelle mit dem folgenden CodeSum Of Array Tabelle

#include <iostream> 
#include <vector> 
using namespace std; 

void inputRoutine(vector<int> &a) 
{ 
    const int MAXNUM = 17; 
    for (int i = 1; i <= MAXNUM; i++) a.push_back(i); 
} 


void printRoutine(vector<int> a) 
{ 
    const int COLS = 5; 
    int size = a.size();           
    int fullrows = size/COLS;         
    int leftover = size % COLS;         
    int rows = fullrows + (leftover != 0);      

    cout << "TABLE:\n"; 
    for (int i = 0; i < rows; i++)        
    { 
     int indexTop = 0;           
     for (int j = 0; j < COLS; j++) 
     { 
     int index = indexTop + i;        
     if (i < fullrows || j < leftover) cout << a[index]; 
     cout << '\t';           
     if (j < leftover) indexTop += rows;     top-of-column 1-d index for the number in this column 
     else    indexTop += fullrows;    
     } 
     cout << '\n'; 
    } 
} 


int main() 
{ 
    vector<int> a; 
    inputRoutine(a); 
    printRoutine(a); 
} 

und ich war in der Lage zu drucken die Ausgabe als die unter

TABLE: 1 5 9 12 15 
     2 6 10 13 16 
     3 7 11 14 17 
     4 8 

Jetzt zu produzieren ich will die Summen der gedruckten Tabelle erhalten, wie unten (die ersten Zahlen sind die Spaltennummern, erste Zeile mit der Spaltennummer 5 zeigen die einzelne Zeilensummen 42, 47, 52, 12, wie in der Tabelle angegeben. die zweite Zeile mit der Spalte Nummer 1: Wenn es nur 1 Spalte gibt, dann gibt es 17 Zeilen - es sollte pro Duce die Gesamtzahl der Zahlen)

C ROW SUMS 

5 42 47 52 12 
************************************ 
1 153 
************************t*********** 
2 11 13 15 17 19 21 23 25 9 
************************************ 

Wie zu diesem Teil, könnte jemand helfen.

+0

42 = 1 + 5 + 9 + 12 + 15 52 = 3 + 7 + 11 + 14 + 17 47 = 2 + 6 + 10 + 13 + 16 12 = 4 + 8 – Eranka

+0

soll es laufen durch alle möglichen Optionen für 'COLS' oder nur eine endliche Menge, zB' 1 Jonas

+0

Es wenn Col 5 die Summen jeder Reihe ausgewählt berechnet werden soll und wenn Spalte 1 ausgewählt, um die Summe von 1 bis 17 sollte – Eranka

Antwort

0

So wie ich es tun würde, wäre einen Puffer row_sum zu haben, die dieser Fall wird aufgefüllt (und berechnet), wenn die Tabelle zu drucken. Nachdem die Tabelle gedruckt wurde, enthält row_sum die berechneten Zeilensummen. Sie könnten COLs chaneg ein Parameter von printRoutine so sein, dass es möglich ist, ohne Neukompilierung durch verschiedene Werte von COLS auszuführen.

Here ist eine einfache Erweiterung Ihres ursprünglichen Codes, der für COLS = 1,...,5 ausgeführt wird. Für jeden Wert von COLS werden die Tabelle und die Zeilensummen ausgegeben.

#include <iostream> 
#include <vector> 
#include <numeric> 
using namespace std; 

void inputRoutine(vector<int> &a) 
{ 
    const int MAXNUM = 17; 
    for (int i = 1; i <= MAXNUM; i++) a.push_back(i); 
} 

void printRoutine(int COLS, vector<int> a, vector<int>& row_sum) 
{ 
    int size = a.size();           
    int fullrows = size/COLS;         
    int leftover = size % COLS;         
    int rows = fullrows + (leftover != 0);      

    // Set the size of the row_sum buffer 
    row_sum.resize(rows); 

    cout << "TABLE:\n"; 
    for (int i = 0; i < rows; i++)        
    { 
     int indexTop = 0;           
     for (int j = 0; j < COLS; j++) 
     { 
     int index = indexTop + i;        
     if (i < fullrows || j < leftover) 
     { 
      cout << a[index]; 

      // Add the value to the row sum. We do the add here, since 
      // if it should be printed it should also be added 
      row_sum[i] += a[index]; 
     } 
     cout << '\t';           
     if (j < leftover) indexTop += rows; // top-of-column 1-d index for the number in this column 
     else    indexTop += fullrows;    
     } 
     cout << '\n'; 
    } 

    // Special case for COLS == 1 
    if (COLS == 1) 
    { 
     row_sum[0] = std::accumulate(std::begin(row_sum), std::end(row_sum), 0); 
     row_sum.resize(1); 
    } 
} 

int main() 
{ 
    vector<int> a; 
    inputRoutine(a); 

    for (int COLS = 1; COLS < 6; ++COLS) // Here we loop over a few selected value of COLS 
    { 
     vector<int> row_sum; // To store the row sums 
     printRoutine(COLS, a, row_sum); 

     // The rest of the loop is just printing the row sums 
     std::cout << '\n' << COLS << '\t'; 
     for (int i : row_sum) 
     std::cout << i << ' '; 
     std::cout << std::endl << std::endl; 
    } 
} 
+0

Jonas nach Ihrem Code berechnet wurde, zeigt 5 separate Tabellen für die Summe, aber meine Forderung, es zu erhalten die Summen der Spalten 5,1,2 in einer Tabelle von Sternen nicht in separaten Tabellen getrennt – Eranka

+0

@Eranka Wenn Sie nur für diese Werte wollen 'COLS' dann ändern Sie einfach die for-Schleife:' for (int COLS = 1; COLS < 6; ++ COLS) ' – Jonas

+0

@Eranka Wenn Sie die Tabelle nicht drucken möchten, kommentieren Sie sie einfach. – Jonas