• 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

42 Warsaw Coding Academy
0 głosów
153 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ź 1,107 wizyt
pytanie zadane 14 lipca 2019 w C i C++ przez Padomen Początkujący (260 p.)
0 głosów
1 odpowiedź 365 wizyt
pytanie zadane 15 lutego 2019 w C i C++ przez Michał_Warmuz Mądrala (5,830 p.)
0 głosów
1 odpowiedź 1,375 wizyt
pytanie zadane 30 października 2018 w C i C++ przez gorgonkowa Obywatel (1,810 p.)

93,382 zapytań

142,382 odpowiedzi

322,539 komentarzy

62,740 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...