Tablica jednowymiarowa

0

Witam. Mam ogromny problem z tablica jednowymiarowa. Zadanie brzmi: "wprowadź n liczb do jednowymiarowej tablicy i wyprowadź je w odwrotnej kolejności"
Mój kod:

#include <stdio.h>
int main()
{
    int n;
    printf("Podaj ilość wierszy tablicy :", n);
    scanf("%d", &n);
    int x, liczba[n], odwrotne[n], y;
    for (x = 0; x < n; x++) {
        printf("podaj liczbe:%d", x);
        scanf("%d", &liczba[x]);
    }
    printf("liczby odwrotne: ");
}

I tutaj kończy się moja twórczość. Siedzę od wczoraj i nic mi nie idzie. Proszę o pomoc.

1

To w końcu C# czy C, a może jednak miało być w C++?
Zadanie jest proste, wprowadź N liczb do tablicy, a następnie iterując tablice od końca (czyli indexując tablice od N-1 do 0) drukuj

1

Pętla w dół z pierwszej tablicy.
Druga tablica nie jest do niczego potrzebna, masz czasownik "wyprowadź je", nie muszą nigdzie "istnieć" w tej postaci

BTW tablica o deklaracji 'n' jest nieprawidłowa w standardzie (choć niektóre kompilatory dopuszczają). Lekarstwem na to jest

int * liczna = malloc(n * sizeof(int));

i na końcu

free(liczba);
0
plx211 napisał(a):

To w końcu C# czy C, a może jednak miało być w C++?
Zadanie jest proste, wprowadź N liczb do tablicy, a następnie iterując tablice od końca (czyli indexując tablice od N-1 do 0) drukuj

To rozumiem ale nie wiem jak to zrobić.

0

Zacznijmy od tego jaki w końcu to język?
Umiesz zrobić pętle która wyświetli 9 8 7 6 5 4 3 2 1 0?

0

Język C.
Nie umiem kompletnie nic jeżeli chodzi o tablice. Ostatni raz programowanie miałam 7 lat temu. A teraz ta nauka zdalna zadania są i nie mam pojęcia jak to zrobić stanęłam na tej odwrotności.

0

Przeczytaj to https://pl.wikibooks.org/wiki/C/Instrukcje_steruj%C4%85ce#for (a zwłaszcza co oznaczają poszczególne wyrażenia).
Następnie spróbuj zrobić program który wydrukuje 9 8 7 6 5 4 3 2 1 0 przy pomocy pętli

0
Agnieszka Zielińska napisał(a):

Język C.
Nie umiem kompletnie nic jeżeli chodzi o tablice. Ostatni raz programowanie miałam 7 lat temu. A teraz ta nauka zdalna zadania są i nie mam pojęcia jak to zrobić stanęłam na tej odwrotności.

Czyli ten kod zarypałaś z netu ...

0

Akurat nie. Wczytać wypisać i dać warunek ogarniam. Nie ogarniam jak odwrócić. A niestety musi być w podobnej formie bo mam jakiś przebieg ćwiczenia i mam przykład ale w przykładzie mam obliczanie max i to już ogarnęłam.

0

Nie rozumiem właśnie

0

Chodzi o cos takiego:
X=n; x>=0;x-- ?

0
Agnieszka Zielińska napisał(a):

Chodzi o cos takiego:
X=n; x<=n;x-- ?

Blisko, tylko warunek stopu jest zły

0

x=n;x>=0;x-- ?

Jak tak to dalej nie działa

0
Agnieszka Zielińska napisał(a):

x=n;x>=0;x-- ?

Jak tak to dalej nie działa

Jesteś już bardzo blisko, masz tu pętle iterującą od N do 0.
Natomiast ty potrzebujesz od N - 1 do 0.

Podpowiedź: Ten x będziesz mogła wtedy użyć do pobierania odpowiednich elementów tablicy liczba pisząc liczba[x]

0

#include <stdio.h> int main() { int n; printf("Podaj ilość wierszy tablicy :", n) ; scanf("%d", & n) ; int x, liczba[n], odwrotne[n], y; for(x=0;x<n;x++) { printf("podaj liczbe:%d", x) ; scanf("%d", & liczba[x]) ; } printf("liczby odwrotne: ") ; for(x=n;n-1>=0;x--) { printf("%d", liczba[x]) ; } - Agnieszka Zielińska 1 minuta temu

Po pierwsze, nie podawaj większego kodu w komentarzach.
Po drugie, widzę masz ZERO ochoty na przyjęcie uwag. Po jakaś jasną cholerę użytkownicy forum mają Ci pomagać?

1

Może przykład mniej abstrakcyjny pomoże ci zrozumieć, jak to zrobić?

Wyobraź sobie magazyn, a w nim długą półkę z dużymi pudłami (tak duże, że jesteś w stanie przenosić tylko jedno).
I teraz masz za zadnie odwrócić kolejność tych pudeł.
Czyli zaczynasz tak, kładziesz pierwsze pudło na podłodze, bierzesz inne i wstawiasz w miejsce tego co jest teraz na podłodze.
Potem wstawiasz, pudło z podłogi w miejsce poprzedniego.
Powtarzasz to tak długo, aż przestawisz wszystkie pudła (no może poza jednym).

Jedynie co masz zrobić to opisać każdy swój ruch w magazynie za pomocą kodu.

Metoda na "dwie półki" może się okazać łatwiejsza do zrobienia.

0

Wiem, że to dotyczy klasycznego C ale może to coś pomoże...

jest to najprostszy przypadek i w tym przypadku masz przepisaną tablicę w odwrotnej kolejności

int main(void)
{
    int tab[]={0,9,8,7,6,5,4,3,2,1};
    int tab2[10];
    int zPom;

    for(int i=9, j=0; i>=0; --i, ++j){ //w tej pętli następuje przepisanie tablicy w odwrotnej kolejności
        zPom=tab[i];
        tab2[j]=zPom;
    }

    for(int i=0; i<10; ++i){ //wyświetlam tablicę która NIE jest odwrócona
        std::cout << tab[i] << " ";
    }

    std::cout << std::endl;

    for(int i=0; i<10; ++i){ //wyświetlam tablicę która JEST odwrócona
        std::cout << tab2[i] << " ";
    }

    std::cout << std::endl;

    return 0;
}

screenshot-20200430211912.png

drugi najprostszy przypadek odwrócenia tablicy ale BEZ przepisywania tablicy wystarczy taka pętla - dla 10 elementowej tablicy

    for(int i=9; i>=0; --i){ //pętla zaczyna się od ostatniego elementu i zmniejsza się do zerowego
    std::cout << tab[i] << " ";
}
3

Rozwiązanie minimalistyczne:

#include <stdio.h>

void read_and_write(size_t index, size_t count)
{
        int value;
        printf("Podaj liczbe %d: ",++index);
        if((index<=count)&&(scanf("%d",&value)==1)) read_and_write(index,count-1);
        else printf("Odwrotna kolejnosc:\n");
        printf("%d\n",value);
}

int main()
{
        size_t count;
        printf("Podaj ilość wierszy tablicy :");
        scanf("%lu",&count);
        read_and_write(0,count);
        return 0;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1