2016-08-09 7 views
0

Also, ich habe folgendes Problem:Ausgang nicht richtig für meine C++ Programm

  1. Aus der Datei tabl.in eine Reihe n gelesen werden (n < = 50).
  2. Danach wird ein quadratisches Array mit n Zeilen und n Spalten gelesen werden; Alle Zahlen im Array bestehen aus maximal 2 Ziffern.
  3. Angezeigt in der Datei tabl.out, der Modulo zwischen der Summe der Zahlen auf der zweiten Diagonale des Arrays und 10, wenn die Summe Palindrom (true = 1, false = 0), und das arithmetische Mittel der Elemente unterhalb der Hauptdiagonalen.

Wird Schreibfunktionen für:

  • das Array zu lesen
  • Berechnung des Betriebs Summe von Nebendiagonale% 10
  • prüft wird, ob das vorherige Ergebnis es Palindrom ist
  • Berechnung des arithmetischen Mittels unterhalb der Hauptdiagonalen

Beispiel:

tabl.in:

4 
5 8 2 12 
1 0 3 16 
1 2 1 11 
5 7 2 19 

tabl.out:

2 1 3 

wo
(12 + 3 + 2 + 5)% 10 = 22% 10 = 2
22 ist Palindrom = 1
1 + 2 + 2 + 1 + 7 + 5 = 18, 18/6 = 3

Mein Code so weit ist:

#include <fstream> 

using namespace std; 

ifstream fin("tabl.in"); 
ofstream fout("tabl.out"); 

void readn(int Arr[][51], int n) { 

    for (int i = 1; i <= n; i++) 
     for (int j = 1; j <= n; j++) 
      fin >> Arr[i][j]; 

} 

int sumsec(int Arr[][51], int n) { 

    int s = 0; 
    float r; 
    for (int i = 1; i <= n; i++) 
     s = s + Arr[i][n - i + 1]; 
    r = s % 10; 
    return r; 

} 

void pald(int Arr[][51], int n) { 

    int s = 0, pal = 0; 
    for (int i = 1; i < n; i++) 
     s = s + Arr[i][n - i + 1]; 
    while (s != 0) { 
     pal = pal * 10 + s % 10; 
     s = s/10; 
    } 
    if (pal == s) 
     fout << "1 "; 
    else 
     fout << "0 "; 

} 

int ambmd(int Arr[][51], int n) { 

    int s = 0, k; 
    float ame; 
    for (int i = 2; i <= n; i++) { 
     for (int j = 1; j <= i - 1; j++) { 
      s = s + Arr[i][j]; 
      k++; 
     } 
    } 
    ame = s/k; 
    return ame; 

} 

int main() { 

    int Arr[51][51], n; 
    float r, ame; 
    fin >> n; 
    readn(Arr, n); 
    r = sumsec(Arr, n); 
    fout << r << " "; 
    pald(Arr, n); 
    ame = ambmd(Arr, n); 
    fout << ame; 

} 

Aber ich habe eine Problem mit der palindrome() Funktion: meine Ausgabedatei wird 2 0 3 für das angegebene Array aus dem Beispiel anstelle von 2 1 3 geschrieben haben. Was mache ich falsch?

+0

Wozu braucht 'pald()' das Array? – CinCout

+0

Palindrom-Funktion für die Modulo ergab nach der Operation der Summe für Elemente aus sekundären Diag geteilt durch 10. Sie finden die Antwort auf Algorithmus oben im Code: (12 + 3 + 2 + 5)% 10 = 22% 10 = 2 .... 22 ist palindrome = 1 –

+1

Gibt es einen Grund, warum Sie nicht 'std :: vector' (oder gar' std :: array') anstelle von C-Arrays verwenden? Neben den Stream-Operatoren ist dies C-Code, nicht C++. –

Antwort

0

Ihre pald Funktion funktionieren würde, wenn Sie s die gleiche Art und Weise berechnen, wie Sie in sumsec und wenn s tun würde, noch die Summe enthalten, nachdem Sie pal berechnen.

In Ihrem Fall while (s != 0) {...}, gefolgt von if (pal == s) {...} könnte als if (pal == 0) umgeschrieben werden, die eindeutig nicht die beabsichtigte Lösung ist. Speichern Sie einfach Ihre Summe vor der Berechnung pal, dann vergleichen Sie mit der gespeicherten Summe.

Ändern Sie auch Ihre Schleifenbedingung für die Berechnung s zu for (int i = 1; i <= n; i++).

int s = 0, pal = 0, sum = 0; 
for (int i = 1; i <= n; i++) 
    s = s + Arr[i][n - i + 1]; 
sum = s; 
while (s != 0) { 
    pal = pal * 10 + s % 10; 
    s = s/10; 
} 
if (pal == sum) 
    fout << "1 "; 
else 
    fout << "0 "; 

Sie sollten auch die verschiedenen Kommentare zu Code-Verbesserungen prüfen, wie nicht wieder die Berechnung der Summe in der pald Funktion.

+0

funktioniert nicht ... immer noch Null für Kumpel –

+0

@DanielCraick Entschuldigung, verpasste den Teil über die Berechnung der Summe, weil ich überprüft Ihren Palindrome-Algorithmus mit einer vorgefertigten Summe. Redigiert, um den anderen Fehler zu erklären. – grek40