Tablica jednowymiarowa

Tablica jednowymiarowa
Agnieszka Zielińska
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
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:

Kopiuj
#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.

plx211
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 181
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

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
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

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

i na końcu

Kopiuj
free(liczba);
Agnieszka Zielińska
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
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ć.

plx211
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 181
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?

Agnieszka Zielińska
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
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.

plx211
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 181
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

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
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 ...

Agnieszka Zielińska
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
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.

Agnieszka Zielińska
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

Nie rozumiem właśnie

Agnieszka Zielińska
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

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

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5550
0
Agnieszka Zielińska napisał(a):

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

Blisko, tylko warunek stopu jest zły

Agnieszka Zielińska
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 13
0

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

Jak tak to dalej nie działa

plx211
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 181
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]

AK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3561
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ć?

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
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.

ZK
  • Rejestracja: dni
  • Ostatnio: dni
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

Kopiuj
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

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

Rozwiązanie minimalistyczne:

Kopiuj
#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;
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.