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

Pomoc z zadaniem(nie działająca funkcja)

Object Storage Arubacloud
0 głosów
396 wizyt
pytanie zadane 19 listopada 2018 w C i C++ przez Hailon Początkujący (310 p.)

Witam!

Jestem początkującym programistą i uczę się z książki Stephena Prata "Język C++. Szkoła programowania" Wydanie 6. Mam problem  z zadaniem z działu "funkcje". Mam już kod ogarniety tylko nie działa mi funkcja odwracająca kolejność. Proszę o pomoc, może o jakieś rady ;)

Treść zadania:

Funkcja fill_array () jako parametr pobiera nazwę tablicy liczb double oraz wielkośc tej tablicy. Użytkownik jest proszony o podanie wartości double, które zostaną wpisane do tablicy. Pobieraniedanych jest przerywane, kiedy tablica jest pełna lub kiedy użytkownik poda daną niebędącą liczbą. Funkcja zwraca liczbę faktycznie wprowadzonych wartości.

Funkcja show_array() jako parametr pobiera nazwę tablicy liczb double oraz wielkośd tej tablicy, po czym pokazuje zawartośc przekazanej tablicy.

Funkcja reverse_array() jako parametr pobiera nazwę tablicy liczb double oraz wielośc tej tablicy, po czym odwraca kolejnośc liczb w przekazanej tablicy.

Program ma użyc opisanych funkcji do wypełniania tablicy, wyświetlania jej, odwrócenia kolejnościjej elementów i ponownego pokazania tablicy.

#include <iostream>

using namespace std;

int fill_array(double table[], int limit);
void show_array(double table[], int limit);
int reverse_array(double table[], int limit);

int main()
{
    int max;
    cout << "Podaj liczbe wyswietlanych wartosci: ";
    cin >> max;
    double tablica[max];
    fill_array(tablica, max);
    show_array(tablica, max);
    reverse_array(tablica, max);
    cout << "Po odwroceniu..." << endl;
    show_array(tablica, max);
    return 0;
}
int fill_array(double table[], int limit)
{
    int i;
    for(i = 1; i <= limit; i++)
    {
        cout << "Podaj wartosc po przecinku nr. " << i << ": ";
        double wynik;
        cin >> wynik;
        if(!cin)
        {
            cin.clear();
            while(cin.get() != '\n')
                continue;
            cout << "Bledne dane, wprowadzanie danych przerwane." << endl;
            break;
        }
        else if(wynik < 0)
            break;
        table[i] = wynik;
    }
    return i;
}
void show_array(double table[], int limit)
{
    for(int i = 0; i < limit; i++ )
    {
        cout << "Wartosc nr. " << i+1 << ": " << table[i+1] << endl;
    }
}
int reverse_array(double table[], int limit)
{
    int p;
    int i;
    for(p = limit-1;p >= 0; p--)
    {
        for(i = 0; i < limit; i++)
        {
            table[i] = table[p];
            break;
        }
    }
    return i;
}

 

komentarz 19 listopada 2018 przez Szfierzak Gaduła (3,750 p.)
Pomysł dobry, choć zastanów się chwilę, co dokładnie robi zagnieżdżona pętla w funkcji odwracającej kolejność. Za pierwszym razem wypełniasz tablicę ostatnim jej elementem i nadpisujesz inne wartości, tracisz w ten sposób dane. Da się to zrealizować w jednej pętli, jeden indeks idzie od początku, drugi od końca i wymieniają się zawartością. Pamiętaj tylko, że do zamiany wartości dwóch zmiennych zawsze jest potrzebna trzecia:)
komentarz 19 listopada 2018 przez Hailon Początkujący (310 p.)

@Hailon,

Pokombinowałem ale dalej stoje w miejscu... Nie wiem jak zapisać te wartosci wraz ze zmienna pomocnicza w tabeli. 

int reverse_array(double table[], int limit)
{
    int p;
    int i;
    int pom;
    for(p = limit-1, i = 0;p >= 0, i < limit; p--, i++)
    {
        pom = i;
        i = p;
        p = pom;
        table[] = table[];
    }
    return ;
}

 

komentarz 19 listopada 2018 przez sefir Dyskutant (8,560 p.)
Zrób klasycznie, czyli skopiuj tablice i w odwrotnej kolejności przepisz dane. Zawsze działa :D
komentarz 19 listopada 2018 przez Szfierzak Gaduła (3,750 p.)
edycja 19 listopada 2018 przez Szfierzak

@Hailon, Za dużo rzeczy na raz:) przejdź się, odpocznij. Oderwij wzrok od kompa.

Jak wrócisz, zastanów się, czy potrzebne są Ci dwa warunki? iteracji w górę i w dół jest tyle samo, nie zależnie od długości tablicy. Poza tym dobrze kombinujesz:)

Zmienna pomocnicza powinna być typu takiego jak elementy przechowywane w tablicy. Jak chcesz zamienić wartości zmiennych a i b, przy pomocy zmiennej c to ogólna zasada jest taka:

c=a; a=b; b=c;

w Twoim przypadku a i b to wartości przechowywane w tablicy.

 

double pom;
int i,j;

for( i=0, j=limit-1; i<limit/2; i++, j--)
{
  pom = tab[i];
  tab[i] = tab[j];
  tab[j] = pom;
}

Edit: edytowałem warunek pętli:) trzeba przejść tylko połowę indeksów, bo inaczej zamieniamy później ponownie na te same wartości. Sprawdź tylko jak działa dla parzystej i nie parzystej długości tablicy, być może trzeba będzie to uwzględnić w warunku.

komentarz 19 listopada 2018 przez Hailon Początkujący (310 p.)
Hahaha, może masz racje ;) Dziś sporo przerobiłem i pewnie nie mysle juz za dobrze ;) Wydaje mi się, że juz dam sobie radę. Dzięki wielkie za pomoc! :D

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

Podobne pytania

0 głosów
1 odpowiedź 187 wizyt
pytanie zadane 23 marca 2019 w C i C++ przez Hailon Początkujący (310 p.)
0 głosów
1 odpowiedź 535 wizyt
0 głosów
2 odpowiedzi 704 wizyt
pytanie zadane 18 listopada 2018 w C i C++ przez Rosol Kuba Początkujący (380 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

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

...