Odwrotne wypisanie tablicy liczb

0

Napisz program, który wczyta z klawiatury ciąg zawierający C liczb typu double do tablicy
statycznej, następnie odwróci kolejność elementów w niej (pierwszy staje się ostatni itd.)
oraz wypisze na ekran zmodyfikowaną tablicę. Wartość C (np. 6) należy zawrzeć w
programie i powinna ona występować co najwyżej 2 razy


#include <stdio.h>
#include <cstdlib>

int main()
{
    const int NMAX = 1000;
    double tab[NMAX];
    int n;

    do {
        printf("podaj dlugosc tablicy \n");
        scanf("%d", &n);
        if (n <= 0 || n > NMAX)
            printf("podana liczba jest spoza zakresu podaj jeszcze raz\n ");
    } while (n <= 0 || n > NMAX);

    for (int i = 0; i < n; i++) {
        printf("Podaj %d element tablicy ", i);
        scanf("%lf", &tab[i]);
    }

    for (int i = n; i; i--) {
        printf("%lf\n", tab[i - 1]);
    }
    system("PAUSE");
    return 0;
}

udało się zrobić coś takiego, natomiast w ogóle nie wiem jak sie zabrać za tę ostatnią część zadania.

0

Chyba Masz odwrócić tablicę, a nie wydrukować od tyłu oryginalną, zmieniony kod po wczytaniu tablicy:

   for (int i=0; i<n; i++){
            printf("Podaj %d element tablicy ", i);
            scanf("%lf", &tab[i]);
}
	int start = 0;
	int end = n - 1;

	while (start < end) {
	double temp = tab[start];
    tab[start++] = tab[end];
    tab[end--] = temp;
	}
    	for (int i = 0; i < n; ++i)
		printf("%lf ", tab[i]);
     system("PAUSE");
return 0;
}

W zadaniu jest, że tablica ma mieć n liczb, a nie NMAX, ale drukuje i tak tyle ile jest wczytane, jak tak może być to spoko.

0

A jaka jest różnica między tym, że tablica jest odwrotna a pokazuje wartości od końca?
Jak mam zrobić żeby te wartości które są wpisywane pokazały się maksymalnie dwa razy?
Niestety nie ogarniam tego i jestem w sumie na początku nauki programowania, więc jeśli to możliwe to proszę o takie łopatologiczne wytłumaczenie tego.

0

A jaka jest różnica między tym, że tablica jest odwrotna a pokazuje wartości od końca?

Różnica jest więcej niż podstawowa, cytując klasyka; w temacie zadania jest, że Masz odwrócić tablicę, a potem tak zmodyfikowaną wydrukować.

Jak mam zrobić żeby te wartości które są wpisywane pokazały się maksymalnie dwa razy?

Nie zauważyłem za pierwszym razem, stała C ma być zawarta w programie, a nie czytana z klawiatury, czyli na początku: double tab[10]; int C = 10;. Tę stałą, C - długość tablicy, Możesz uzyć, w programie, co najwyżej dwa razy, a nie wydrukować wartości tablicy dwa razy.

0

Różnica jest więcej niż podstawowa, cytując klasyka; w temacie zadania jest, że Masz odwrócić tablicę, a potem tak zmodyfikowaną wydrukować."
Czyli mimo, że kompilator pokazuje te same wartości to chodzi o to, żeby zrobić w ten sposób, który Pan przedstawił? Dobrze rozumiem?

Nie zauważyłem za pierwszym razem, stała C ma być zawarta w programie, a nie czytana z klawiatury, czyli na początku: double tab[10]; int C = 10;. Tę stałą, C - długość tablicy, Możesz uzyć, w programie, co najwyżej dwa razy, a nie wydrukować wartości w tablicy dwa razy.

Chodzi o to, że mam napisać jakiś program i on ma wykorzystać wartości tej tablicy dwa razy?

0

Chodzi o to, że mam napisać jakiś program i on ma wykorzystać wartości tej tablicy dwa razy?

Przeczytaj uważnie treśc zadania, a potem to co napisałem i Odpowiedz, których słów/zdań nie Rozumiesz.

0

Przeczytaj uważnie treśc zadania, a potem to co napisałem i Odpowiedz, których słów/zdań nie Rozumiesz.

Ogólnie tego ostatniego zdania, bo nie rozumiem co mam zrobić z tym C.
to C jest moją 'liczbą' którą ustalam ilość tablic?

0

Zadanie nie do rozwiązania, C musi wystąpić:

  • Deklaracja
  • Wprowadzenie
  • Wczytaywanie
  • Odwracanie
  • Wyświetlanie

Są dwa sposoby na to to:

unsigned C=wczytajRozmiar(); // wczytajRozmiar trza napisać
RobReszte(C); // RobReszte też trza napisać

C występuje 2 razy
* ```cpp
RobReszte(wczytajRozmiar()); // wczytajRozmiar trza napisać, RobReszte też trza napisać

C występuje 0 razy

0

Chodzi o coś takiego?

#include <stdio.h>
#include <cstdlib>

int main()
{
    const int C=10;
    double tab[C];


     for (int i=0; i<10; i++){
            printf("Podaj %d element tablicy ", i);
            scanf("%lf", &tab[i]);
}
    int start = 0;
    int end = 10 - 1;

    while (start < end) {
    double temp = tab[start];
    tab[start++] = tab[end];
    tab[end--] = temp;
    }
        for (int i = 0; i < 10; ++i)
        printf("%lf ", tab[i]);
     system("PAUSE");
return 0;
}
0

Ogólnie tego ostatniego zdania, bo nie rozumiem co mam zrobić z tym C.
to C jest moją 'liczbą' którą ustalam ilość tablic?

Widać, że nie Zrozumiałeś, C nie jest liczbą, która ustala "ilość tablic", WTF, skąd Ci to przyszło do głowy? C jest długością tablicy, na której operuje program i jest w ten program, wbudowana.

Zadanie nie do rozwiązania, C musi wystąpić:

Deklaracja
Wprowadzenie
Wczytaywanie
Odwracanie
Wyświetlanie

Niekoniecznie pięć razy, ale trzy, "Wartość C (np. 6) należy zawrzeć w programie", rozumiem, to tak, że jest to stała ustalona w kodzie, czyli można (?) zrobić tak:

    double tab[10];
    int C = 10; // to sie nie powinno liczyć, definicja C
	

    for (int i = 0; i < C; i++) { // pierwsze uzycie
        printf("Podaj %d element tablicy ", i);
        scanf("%lf", &tab[i]);
    }
    
    int start = 0;
    int end = C - 1; // drugie uzycie

    while (start < end) {
    double temp = tab[start];
    tab[start++] = tab[end];
    tab[end--] = temp;
    }

    for (int i = 0; i < C; ++i) { // tzrecie
        printf("%lf ", tab[i]);
    }
    system("PAUSE");
    return 0;

Czyli, literalnie traktując nie do rozwiązania, chociaż jak odliczyć czytanie i drukowanie, to w samym odwracaniu jest użyta raz, a szczerze pisząc, nie widzę możliwości odwrócenia tablicy w C bez znajomości długości.

0

C może wystąpić raz:

#include <stdio.h>

int main()
{
    double arr[10];
    size_t len = sizeof(arr) / sizeof(arr[0]);
    
    printf("%d\n", len);

    return 0;
}

A co do pętli, to jeśli to ma być C++ to można użyć std::begin i std:🔚

#include <iostream>

using namespace std;

int main()
{
    double arr[10] = {1., 2., 3., 4., 5., 6., 7., 8., 9., 10.};

    for(auto it = std::begin(arr); it != std::end(arr); ++it) {
       cout << *it << endl;  
    }

    return 0;
}
0

fajne algorytmy pokazujecie, to ja dorzucę swój :P

#include <iostream>

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

    std::cout << "tablica przed odwroceniem" << std::endl;

    for(int i=0; i<10; i++){
        std::cout << tab[i] << " ";
    }

    std::cout << std::endl;

    std::cout << "tablica po odwroceniu" << std::endl;

    for(int i=9; i>=0; i--){
        std::cout << tab[i] << " ";
    }

    std::cout << std::endl;

    return 0;
}

dorób se wczytywanie z klawiatury.

0

Dzięki za wszystkie podpowiedzi i tłumaczenia trochę się rozjaśniło.
Jutro Wam podrzucę "co autor miał na myśli" z tym zadaniem.
Dzięki!

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