Array-Problem c++

Olli

9*UotD / 13*UotN
ID: 4117
L
21 April 2006
3.518
189
Hi,

warum sagt mir der Compiler, a wäre nicht deklariert, habe ich doch mit float[a] getan, oder?

Code:
/* Einkommensteuerberechnung anch Richtl. 1981
   Zweck: einfache if-Anweisungen
   Rundungen durch Typkonversion in long
   Datei: EK1.cpp
*/
#include <stdio.h>
#include <conio.h>
#include <iostream>
using namespace std;

int main()
{
    double EST,  //Einkommensteuer
    E1, E2,      //Hilfsgroessen
    klammer,     //im Hornerschema
    zvE;         //Eingabe: zu versteuerndes EK
    long int E;  //Vielfaches von 54
    char ch;
    char antwort;
    
    do
    {
    //Eingabe
    //............ Markierung fuer spätere Zwecke ..........
    //clrscr();
               cout << "\nBerechnung der Einkommensteuer (Tarif 1981)" ;
               cout << endl << endl;
               cout << " zu versteuerndes Einkommen: ";
                cin >> zvE;
    //Verarbeitung
                  E = ((long int) zvE / 54 ) * 54;
                  if (E <= 4212) //Nullzone
                  EST = 0.0;
        else
        if (E <= 18000) //Untere Proportionalzone
        float a[5] = {3034.0, 2200.0, 695.0, 73.76, 3.05};
        E1 = (E -18000)/10000.0;
        if(E < 60000)
        {E1 = (E - 18000)/10000.0;
        EST = a[4];
        for (k = 4; k >= 1; --k)
        EST = long((EST * E1 + a[k-1])*1000)/1000.0;
        }        
        
        
        
else
    if (E <= 129999) //Obere Progressionszone
   {
   E2 = (E - 60000)/10000.0;
   klammer = long ((0.09*E2-5.45)*1000)/1000.0;
   klammer = long ((klammer*E2+88.13)*1000)/1000.0;
   klammer = long ((klammer*E2+5040)*1000)/1000.0;
   klammer = long ((klammer*E2+20018)*100)/100.0;
   }
else //Obere Proportionalzone
EST = 0.56 * E - 14837.0;
EST = long (EST)/1.0;
//Ausgabe
cout << "\n Bei einem zu versteuernden Einkommen von \n";
cout.setf(ios::fixed);
cout.fill('*');
cout.width(10);
cout << zvE << " Euro";
cout << endl << "betraegt die Steuer ";
cout.width(10);
cout << EST << " Euro\n";
//.............. Markierung fuer spaetere Zwecke ..............
cout << " Weiter? (j/n) ";
cin >> antwort;
while (cin.get() != '\n');
antwort = toupper (antwort);
}
while (antwort == 'J');
system("pause");
return 0;
}

Gruß
Olli
 
hi,

es ist sehr schwer durch diesen Blockcode mit Kommentaren durchzublicken, aber ich würde sagen dein Compiler hat recht, da 'a' nur Bedingt deklariert wird.

Pack das:
float a[5] = {3034.0, 2200.0, 695.0, 73.76, 3.05};

zu den anderen Variablen nach oben,

und Lösch die Zeile:
else if (E <= 18000) //Untere Proportionalzone

dann sollte es laufen.

mfg expert173
 
hi,

nein fehlt nicht.

und du hast nen fehler in der for Schleife, da feht 'int' vor dem 'k'.

ich kanns Problemlos Compilieren, aber obs richtig leuft kann ich dir nicht sagen, hab kein Schimmer von Einkommenssteuer.

mfg expert173
 
Danke, ich brauchte den Teil gar nicht rauslöschen, die Deklaration nach oben zu setzen hat gereicht.
Fehler mit der int-Initialisierung hab ich auch behoben ^^
Nur verstehe ich immer noch nicht, warum die Initialisierung nicht an der Stelle auch möglich war.

Gruß
Olli
 
hi,

wie ich schon gesagt hab: das a wurde nur bedingt Deklariert, aber in jedem fall gebraucht.

Schau dir deine if/elseif konstruktionen nochmal genauer an, vielleicht kommst dann noch drauf. *Besonder die Zeile die du Löschen sollst*

mfg expert173
 
Ah, verstehe, ist nur für Werte über 4212 initialisiert und das akzeptiert der Compilar nicht.
Vielen Dank @expert173

Hier kann also zu.

Gruß
Olli