• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

błąd konsoli, wypisanie tablicy z elementami mniejszymi niż średnia arytmetyczna

Object Storage Arubacloud
0 głosów
132 wizyt
pytanie zadane 16 stycznia 2018 w C i C++ przez Groszek22 Nowicjusz (120 p.)
edycja 16 stycznia 2018 przez criss

Hej, mam problem. Nie wiem czemu program nie chce wypisywać mi tablicy dynamicznej z elementami mniejszymi niż średnia arytmetyczna. Identycznie zrobiona jest funkcja do wypisywania elementów większych. Program po kompilacji wyrzuca też błąd. Czy ktoś mógłby rzucić okiem na poniższy kod? Z góry dziękuje :) Generalnie program z tablicy N elementowej ma wypisywac 2 tablce dynamiczne z elementami wiekszymi niz srednia i mniejszymi. A potem sortowac je.

 

#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <string>
#include <limits>
#include <cctype>
#include <limits>
#include <fstream>
#include <iomanip>

using namespace std;

/* wymiary tablic */
#define N 12

/* liczba elementow w wierszu przy drukowaniu */
#define K 3

/* granice przedzialow */
#define D 0
#define G 50

static void usage(const char *name)
{
    if (name) {
        cout << "\tUsage:\t" << name << endl;
    }
    exit(EXIT_FAILURE);
}

static int A[N];    /* tablica A */

int wczytajLosowe(int tab[], int n, int d, int g, int *i_b, int *i_c)
{
    int i = 0;
    float suma = 0, srednia = 0;

    if (g < d)
        return -1;
    else if (g == d) {
        while (i < n) {
            tab[i] = 0;
            ++i;
        }
        *i_b = n;
        *i_c = n;
    }
    else {
        while (i < n) {
            tab[i] = d + rand() % (g - d + 1);
            ++i;
        }
    }
    for (int i = 0; i < n; i++) {
        suma = suma + tab[i];
    }
    srednia = suma / n;

    while (i < n) {
        /* overflow */
        if (tab[i] > srednia) {
            (*i_b)++;
        }
        else {
            (*i_c)++;
        }
        ++i;
    }
    return 0;
}

void wypisz_po_k(int tab[], int n, string naglowek)
{
    if (!naglowek.empty())
        cout << naglowek << endl;
    int i = 0;
    while (i < n) {
        cout << "\t";
        cout << setw(3) << tab[i];
        ++i;
        if (i % K == 0)
            cout << endl;
    }
    cout << endl;
}

int kopiuj_wieksze(int tab[], int n, int tab2[], int i_b)
{

    int i = 0, j_b = 0, suma = 0, srednia = 0;
    for (int i = 0; i < n; i++) {
        suma = suma + tab[i];
    }
    srednia = suma / n;
    while (i < n) {
        /* overflow */
        if (tab[i] > srednia) {
            tab2[j_b++] = A[i];
        }
        ++i;
    }

    return 0;
}

int kopiuj_mniejsze(int tab[], int n, int tab3[], int i_c)
{

    int i = 0, j_c = 0, suma = 0, srednia = 0;
    for (int i = 0; i < n; i++) {
        suma = suma + tab[i];
    }
    srednia = suma / n;
    while (i < n) {
        /* overflow */
        if (tab[i] < srednia) {
            tab3[j_c++] = A[i];
        }
        ++i;
    }

    return 0;
}

/* Sortuj poprzez wstawianie. Rosnaco (najmniejsze na poczatku. */
void Sortowanie(int tab[], int n)
{
    int k;
    for (int i = 0; i < n; i++)
    {
        k = i;
        for (int j = i + 1; j < n; j++)
            if (tab[j] < tab[i])
                k = j;

        swap(tab[k], tab[i]);
    }
}
int main(int argc, char* argv[])
{
    int ret = -1, *B = NULL, *C = NULL, i_b = 0, i_c = 0;    /* status bledu, tablica parzytych >= 0, parzystych <0, liczba parzystych >= 0 i parzystych < 0 */

                                                            /* Krok 0. Walidacja + info */
    cout << "\nKrok 0\n";
    if (argc > 1) {
        usage(argv[0]);
    }
    cout << "\tProgram wywoluje sie bez argumentow.\n";
    cout << "\tW kroku 1 program wczytuje liczby calkowite losowe do tablicy A wymiaru [" << N << "], przy czym tablica A zawiera liczby z przedzialu [" << D << ", " << G << "]\n";
    cout << "\tW kroku 2 tablica jest drukowana na std::cout wierszami, po [" << K << "].\n";
    cout << "\tW kroku 3 elementy większe od sredniej z tablicy A kopiowane sa do tablicy B, elementy mniejsze z tablicy A kopiowane sa do tablicy C...\n";
    cout << "\tW kroku 4 wszystkie 3 tablice sa drukowane\n";
    cout << "\tW kroku 5 tablice B i C sa sortowane algorytmem Insertion Sort o zlozonosci O(n^2)\n";
    cout << "\tW kroku 6 tablice B i C sa drukowane\n";

    /* Krok 1. Wczytaj liczby losowe do tablic */
    cout << "Krok 1\n";
    srand(time(0));
    ret = wczytajLosowe(A, N, D, G, &i_b, &i_c);
    if (ret < 0) {
        cout << "\tBlad wczytywania liczb losowych do tablicy A " << endl;
        exit(EXIT_FAILURE);
    }

    /* Krok 2. Drukowanie wierszami */
    cout << "Krok 2\n";
    wypisz_po_k(A, N, "\tTablica A");
    cout << endl;

    /* Krok 3. kopiuj parzyste */
    cout << "Krok 3\n";
    B = new int[i_b]();
    if (!B) {
        cout << "\tBlad alokacji tablicy B" << endl;
        exit(EXIT_FAILURE);
    }
    ret = kopiuj_wieksze(A, N, B, i_b);
    if (ret < 0) {
        cout << "\tBlad kopiowania liczb losowych do tablic B i C " << endl;
        delete[] B;
    
        exit(EXIT_FAILURE);
    }

    cout << "Krok 3\n";
    C = new int[i_c]();
    if (!C) {
        cout << "\tBlad alokacji tablicy C" << endl;
        exit(EXIT_FAILURE);
    }
    ret = kopiuj_mniejsze(A, N, C, i_c);
    if (ret < 0) {
        cout << "\tBlad kopiowania liczb losowych do tablic B i C " << endl;
        delete[] B;
        exit(EXIT_FAILURE);
    }

    /* Krok 4. wypisz */
    cout << "Krok 4\n";
    wypisz_po_k(A, N, "\tTablica A");
    wypisz_po_k(B, i_b, "\tTablica B");
    wypisz_po_k(C, i_c, "\tTablica C");

    /* Krok 5. sortuj */
    cout << "Krok 5\n";
    Sortowanie(B, i_b);
    Sortowanie(C, i_c);

    /* Krok 6. wypisz */
    cout << "Krok 6\n";
    wypisz_po_k(B, i_b, "\tTablica B");
    wypisz_po_k(C, i_c, "\tTablica C");

    delete[] B;
    delete[] C;
   
    system("pause");
    return EXIT_SUCCESS;
}

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 765 wizyt
pytanie zadane 14 lipca 2019 w C i C++ przez Padomen Początkujący (260 p.)
0 głosów
1 odpowiedź 211 wizyt
pytanie zadane 15 lutego 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)
0 głosów
1 odpowiedź 889 wizyt
pytanie zadane 30 października 2018 w C i C++ przez gorgonkowa Obywatel (1,810 p.)

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...