Die Überwachung von Fertigungsprozessen und Qualitätssicherung von Industrieprodukten wird häufig mit sog. Kontrollkarten (auch Qualitätsregelkarten genannt) durchgeführt. Basis sind dabei Mittelwerte von Produkt-Stichproben sowie deren Toleranz-Spannweiten. Für die Einrichtung einer (einfachen) Kontrollkarte werden im Vorlauf aus der Lieferung oder Produktion N Stichproben des Umfangs k gezogen und Mittelwerte sowie Spannweiten errechnet. Daraus ergeben sich dann "Konfidenzbänder" (auch Vertrauensintervalle genannt), die wegen des üblicherweise kleinen Stichprobenumfangs aber nicht der Gaussverteilung, sondern einer sog. "Hypergeometrischen Verteilung" folgen.
 
 In der laufenden Fertigung werden dann gelegentlich Stichproben entnommen. Durch Mittelwertbildung ist das Verfahren "Ausreisser-resistent", und die Werte werden daraufhin überprüft, ob sie innerhalb der zugehörigen Konfidenzbänder liegen. Ist das nicht der Fall, muß eingegriffen werden, da es sich nicht mehr um rein zufällige Abweichungen handelt. 
  Hinweis: Darüber hinaus existieren in der betrieblichen Praxis auch Karten, bei denen zwischen Warn- und Eingriffsgrenzen unterschieden wird!
 WindowTitle upper$("   (x,R) - Q u a l i t ä t s k o n t r o l l k a r t e")
'Q:Müller:BASIC-Prog.f.d.angew.Statistik, Oldenbourg 1983, S.270f
'Demoübersetzung nach XProfan11, 2017-11 by P.Specht/Wien, OHNE JEDE GEWÄHR!
WindowStyle 24:cls:font 2
declare R![10],X![10,20],X1![10]
declare D$,DATA$,E$,K$
declare E&,I&,j&,K&,N&
declare A!,D1!,D2!,K0!,K9!,R0!,R1!,R9!,tmp!,X0!,X2!,X9!
DATA$=\
"1.88, 0.00, 3.27,"+\
"1.02, 0.00, 2.57,"+\
"0.73, 0.00, 2.28,"+\
"0.58, 0.00, 2.11,"+\
"0.48, 0.00, 2.00,"+\
"0.42, 0.08, 1.92,"+\
"0.37, 0.14, 1.86,"+\
"0.34, 0.18, 1.82,"+\
"0.31, 0.22, 1.78,"+\
"0.29, 0.26, 1.74,"+\
"0.27, 0.28, 1.72,"+\
"0.25, 0.31, 1.69,"+\
"0.24, 0.33, 1.67,"+\
"0.22, 0.35, 1.65,"+\
"0.21, 0.36, 1.64,"+\
"0.20, 0.38, 1.62,"+\
"0.19, 0.39, 1.62,"+\
"0.19, 0.40, 1.60,"+\
"0.18, 0.41, 1.59"
K$="XProfan-PC"
Start:
CLS
print "\n    Datum ?: ";:INPUT D$
if D$="":D$=date$(0):locate %csrlin-1,14:print d$
    print "    Kennung: ";k$:print
    PRINT " 1 = Einrichten einer Kontrollkarte auf Grund von Gut-Proben"
    PRINT " 2 = Stichprobenauswertung und Einträge in die Kontrollkarte"
    PRINT
    G150:
    print " Gewünschte Wahl-Nr.?: ";:input E&
    case (E&<1) OR (E&>2):goto "G150"
    PRINT
    G180:
    print " Anzahl der Stichproben [2..10]?: ";:INPUT N&
    if (N&<=1) OR (N&>10):beep:Goto "G180":endif
        G200:
        print "      Stichprobenumfang [3..20]?: ";:INPUT K&
        PRINT
        if (K&<=2) OR (K&>20):beep:goto "G200":endif
            Whileloop N&:I&=&Loop
                PRINT "\n ";I&;". Stichprobe\n --------------------------"
                whileloop k&:j&=&Loop
                    PRINT " ";J&;". Eingabewert?: ";
                    input tmp!:X![I&,J&]=tmp!
                endwhile
                PRINT
            endwhile
            '    ----------------------------------------------------
            weiter:
            '    Ausdruck
            Cls:PRINT " ";D$;"   ";K$:PRINT
            GOTO if(E&=1,"G380","G400")
            G380:
            PRINT " Einrichten der Kontrollkarte"
            GOTO "G410"
            G400:
            PRINT " Eintragen in die Kontrollkarte"
            G410:
            PRINT
            PRINT " Anzahl dsr Stichproben: ";N&
            PRINT " Jew. Stichprobenumfang: ";K&
            PRINT
            whileloop n&:i&=&Loop
                PRINT
                PRINT " ";I&;". Stichprobe"
                PRINT
                whileloop k&:j&=&Loop
                    PRINT " ";J&;". Eingabewert: ";format$("%g",X![I&,J&])
                endwhile
                PRINT
            endwhile
            '    ---------------------------
            '    Berechnung
            whileloop n&:i&=&Loop
                X1![I&]=0
            endwhile
            X2!=0:R1!=0
            whileloop n&:i&=&Loop
                X0!=X![I&,1]
                X9!=X![I&,1]
                whileloop k&:j&=&Loop
                    case X0!>X![I&,J&]:X0!=X![I&,J&]
                    case X9!<X![I&,J&]:X9!=X![I&,J&]
                    X1![I&]=X1![I&]+X![I&,J&]
                endwhile
                X1![I&]=X1![I&]/K&
                R![I&]=X9!-X0!
                R1!=R1!+R![I&]
                X2!=X2!+X1![I&]
            endwhile
            X2!=X2!/N&
            R1!=R1!/N&
            Goto if(E&=1,"G790","G1200")
            G790:
            A! =val(substr$(data$,3*(k&-2)+1,","))
            D1!=val(substr$(data$,3*(k&-2)+2,","))
            D2!=val(substr$(data$,3*(k&-2)+3,","))
            K0!=X2!-A!*R1!
            K9!=X2!+A!*R1!
            R0!=D1!*R1!
            R9!=D2!*R1!
            G1200:
            ' Ausgabeteil
            PRINT:PRINT:PRINT
            case E&=1:GOTO "G1230"
            case E&=2:goto "G1290"
            G1230:
            PRINT " TOLERANZBÄNDER FÜR DIE KONTROLLKARTE"
            PRINT " ------------------------------------"
            PRINT " Untere Kontrollgrenze für Stichproben-Mittelwerte: ";format$("%g",K0!)
            PRINT "  Obere Kontrollgrenze für Stichproben-Mittelwerte: ";format$("%g",K9!)
            PRINT " Ontere Kontrollgrenze für Stichproben-Spannweite:  ";format$("%g",R0!)
            PRINT "  Obere Kontrollgrenze für Stichproben-Spannweite:  ";format$("%g",R9!)
            G1290:
            PRINT
            PRINT " ERRECHNUNG DER STICHPROBENMITTELWERTE UND -SPANNWEITEN"
            Print " ------------------------------------------------------"
            PRINT " Nr.";tab(14);"Mittelwert";tab(32);"Spannweite"
            whileloop n&:i&=&Loop
                PRINT " ";I&;TAB(14);format$("%g",X1![I&]);TAB(32);format$("%g",R![I&])
            endwhile
            PRINT
            G1350:
            print:locate %csrlin-1,1
            print " Sind weitere Berechnungen gewünscht (j/n)?: ";:INPUT E$
            case left$(lower$(E$),1)="j":goto "Start"
            END
 |