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

Odwracanie kolejności elementów tablicy

Object Storage Arubacloud
+1 głos
824 wizyt
pytanie zadane 16 lutego 2021 w C i C++ przez Karson Obywatel (1,000 p.)

Witam mam problem z odwracaniem kolejnosci wyświetlania liczb. Poniżej wkleje mój kod, gdy wpisuje liczby np 1, 2, 3 chce żeby funkcja wyświetliła mi je od tylu czyli 3, 2, 1, ale jest taki problem ze jako pierwsze wypisuje mi jakaś liczbe której nie podałem a jak zakończę wprowadzanie wcześniej tzn jak napisze np q to jako pierwsze wyświetla mi 0 i w obu przypadkach przez to nie wyświetla mi ostatniej liczby która wprowadziłem.

#include <iostream>
int fill_array(double arr[], int size);
void show_array(const double arr[], int size);
void reverse_array(double arr[], int size);
int main()
{
    using namespace std;
    double tablica [6];
    int size;
    size = fill_array(tablica, 6);
    show_array(tablica, size);
    cout << "Odwrocone wartosci.\n";
    reverse_array(tablica, size);
    
    return 0;
}
int fill_array(double arr[], int size)
{
    using namespace std;
    double temp;
    int i;
    for (i = 0; i < size; i++)
    {
        cout << "Podaj wartosc nr " << (i + 1) << ": ";
        cin >> temp;
        if (!cin)
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout << "Bledne dane, wprowadzanei danych przerwane.\n";
            break;
        }
        else if (temp < 0)
            break;
        arr[i] = temp;
    }
    return i;
}
void show_array(const double arr[], int size)
{

    for (int i = 0; i < size; i++)
    {
        std::cout << "wartosc " << (i + 1) << ": ";
        std::cout << arr[i] << std::endl;
    }
}
void reverse_array(double arr[], int size)
{
    for (int i = size; i > 0; i--)
    {
        std::cout << "wartosc " << i << ": ";
        std::cout << arr[i] << std::endl;
    }
}

 

1 odpowiedź

0 głosów
odpowiedź 16 lutego 2021 przez VBService Ekspert (253,120 p.)
wybrane 16 lutego 2021 przez Karson
 
Najlepsza

1. Bardziej czytelne jest (i w całym programie jest do "użycia")

int main()
{
    using namespace std;

    ...
}

na

#include <iostream>
using namespace std;

int fill_array(double arr[], int size);
void show_array(const double arr[], int size);
void reverse_array(double arr[], int size);

int main()
{ 
    ...
}

2. Skoro i tak "ręcznie" podajesz wielkość tablicy to po co tworzysz zmienną i pobierasz wielkość tablicy

int main()
{
    using namespace std;
    double tablica [6];
    int size;
    size = fill_array(tablica, 6);
    show_array(tablica, size);

    ...
}

na 

int main()
{
    int size=6;
    double tablica [size];    
    fill_array(tablica, size);
    show_array(tablica, size);

    ....
}

3. "Zapełniasz" tablice od indeksu 0 (zero)

int fill_array(double arr[], int size)
{

    double temp;
    int i;
    for (i = 0; 

   ...
}

no to rewers musi też "osiągnąć" 0 (zero)  wink

void reverse_array(double arr[], int size)
{
    for (int i=size - 1; i >= 0; i--)
    {

 

komentarz 16 lutego 2021 przez Karson Obywatel (1,000 p.)
bo ta funkcja zwraca liczbe wprowadzonych danych - size. I jak to ustawie na wielkość tablicy to wyświetli mi tylko te dane które sa wprowadzone a jak ustawie wielkość która jest na początku to przy tych wartościach gdzie nic nie podałem wyświetli mi nie zero.
komentarz 16 lutego 2021 przez Karson Obywatel (1,000 p.)

@VBService, tez to sprawdzałem ale dalej wyświetla mi nie jakaś liczba na początku 

 

komentarz 16 lutego 2021 przez Karson Obywatel (1,000 p.)

@VBService, oo mam, ustawiłem i na początku na wartość size - 1

1
komentarz 16 lutego 2021 przez VBService Ekspert (253,120 p.)

wink 

#include <iostream>
using namespace std;


void fill_array(double arr[], int size);
void show_array(double arr[], int size);
void reverse_array(double arr[], int size);

int main()
{
    int size=6;
    double tablica[size];    
    fill_array(tablica, size);
    show_array(tablica, size);
    cout << "Odwrocone wartosci.\n";
    reverse_array(tablica, size);
     
    return 0;
}

void fill_array(double arr[], int size)
{
    double temp;
    for (int i=0; i<size; i++)
    {
        cout << "Podaj wartosc nr " << (i + 1) << ": ";
        cin >> temp;
        if (!cin)
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout << "Bledne dane, wprowadzanei danych przerwane.\n";
            break;
        }
        else if (temp < 0)
            break;
        arr[i] = temp;
    }
}
void show_array(double arr[], int size)
{
    for (int i=0; i<size; i++)
    {
        cout << "wartosc " << (i + 1) << ": ";
        cout << arr[i] << endl;
    }
}
void reverse_array(double arr[], int size)
{
    for (int i=size-1; i>=0; i--)
    {
        cout << "wartosc " << (i + 1) << ": ";
        cout << arr[i] << endl;
    }
}

 

komentarz 16 lutego 2021 przez Karson Obywatel (1,000 p.)

@VBService, jeszcze mam pytanie, czy dałoby nie zrobić tak żeby funkcja show_array wyświetlała mi te elementy w odwrotnej kolejnosci? Bo wyświetla mi je tak samo.

komentarz 16 lutego 2021 przez VBService Ekspert (253,120 p.)
chcesz mieć jedna funkcję show, która wyświetli dwa warianty? normalnie i rewers?
komentarz 16 lutego 2021 przez Karson Obywatel (1,000 p.)
dokładnie
1
komentarz 16 lutego 2021 przez VBService Ekspert (253,120 p.)
edycja 16 lutego 2021 przez VBService

Tak "na już"  mało elegancki sposób, ale działa  wink

#include <iostream>
using namespace std;


void fill_array(double arr[], int size);
void show_array(double arr[], int size, int direction);

int main()
{
    int size=6;    
    double tablica[size]; 
   
    fill_array(tablica, size);
    show_array(tablica, size, 0); // 0 - DIRECTION_NORMAL
    cout << "Odwrocone wartosci.\n";
    show_array(tablica, size, 1); // 1 - DIRECTION_REVERSE
     
    return 0;
}

void fill_array(double arr[], int size)
{
    double temp;
    for (int i=0; i<size; i++)
    {
        cout << "Podaj wartosc nr " << (i + 1) << ": ";
        cin >> temp;
        if (!cin)
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout << "Bledne dane, wprowadzanei danych przerwane.\n";
            break;
        }
        else if (temp < 0)
            temp = temp * -1; // Zamiana liczby ujemnej na dodatnia
        arr[i] = temp;
    }
}
void show_array(double arr[], int size, int direction)
{
    if (! direction) {
        for (int i=0; i<size; i++)
        {
            cout << "wartosc " << (i + 1) << ": ";
            cout << arr[i] << endl;
        }
    } else {
        for (int i=size-1; i>=0; i--)
        {
            cout << "wartosc " << (i + 1) << ": ";
            cout << arr[i] << endl;
        }        
    }
}

lub z użyciem reverse() method  wink

#include <iostream>
#include <algorithm>
using namespace std;


void fill_array(double arr[], int size);
void show_array(double arr[], int size, int direction);

int main()
{
    int size=6;
    
    double tablica[size];    
    fill_array(tablica, size);
    show_array(tablica, size, 0); // 0 - DIRECTION_NORMAL
    cout << "Odwrocone wartosci.\n";
    show_array(tablica, size, 1); // 1 - DIRECTION_REVERSE
     
    return 0;
}

void fill_array(double arr[], int size)
{
    double temp;
    for (int i=0; i<size; i++)
    {
        cout << "Podaj wartosc nr " << (i + 1) << ": ";
        cin >> temp;
        if (!cin)
        {
            cin.clear();
            while (cin.get() != '\n')
                continue;
            cout << "Bledne dane, wprowadzanei danych przerwane.\n";
            break;
        }
        else if (temp < 0)
            temp *= (-1); // Zamiana liczby ujemnej na dodatnia
        arr[i] = temp;
    }
}
void show_array(double arr[], int size, int direction)
{
    if (direction) reverse(arr, arr + size);
    for (int i=0; i<size; i++)
    {
        cout << "wartosc " << (i + 1) << ": ";
        cout << arr[i] << endl;
    }
}

 

komentarz 16 lutego 2021 przez Karson Obywatel (1,000 p.)
Dzięki za pomoc ;)
1
komentarz 16 lutego 2021 przez VBService Ekspert (253,120 p.)
edycja 16 lutego 2021 przez VBService

Nie musisz przerywać programu w linii 34-35  wink

        else if (temp < 0)
            temp = temp * -1; // Zamiana liczby ujemnej na dodatnia

lub

        else if (temp < 0)
            temp *= (-1); // Zamiana liczby ujemnej na dodatnia

how to make negative numbers into positive

Podobne pytania

0 głosów
3 odpowiedzi 4,898 wizyt
0 głosów
1 odpowiedź 2,783 wizyt
pytanie zadane 4 marca 2018 w C i C++ przez bartez86 Nowicjusz (220 p.)
0 głosów
2 odpowiedzi 2,858 wizyt
pytanie zadane 18 listopada 2017 w C# przez Mesne191 Początkujący (460 p.)

92,556 zapytań

141,404 odpowiedzi

319,560 komentarzy

61,942 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!

...