Pomoc przy kodzie źródłowym język C

0

Witam, mam takie o zadanie: mam zmodyfikować ten kod:

#include <stdio.h>
#include <conio.h>
int main()
{
int i,n;
printf("Podaj ile liczb chcesz wpisac: ");
scanf("%d",&n);
printf("Podaj te liczby: ");
int tab [100];
for (i=0; i<n; i++)
scanf("%d",tab+i);

for (i=n-1; i>=0; i--)
    printf("%d\n",tab[i]);
getch();
return 0;

}

W poleceniu po modyfikacji: Wczytaj z klawiatury ciąg n liczb rzeczywistych (zakładamy, że n jest wcześniej podane przez użytkownika i n<=100), po czym wypisz te liczby w kolumnie w kolejności odwrotnej do wczytywania. Wymóg: zadeklaruj tablicę, ale w instrukcjach nie korzystaj z odwołania do elementów tablicy za pomocą operatora indeksowania [], wykorzystaj wskaźniki i operator wyłuskania *.

Na razie doszedłem do czegoś takiego:

#include <stdio.h>
#include <conio.h>

int main(void)
{
int i;
int n;
int tab[100];
n<=100;
printf("Podaj ciag n: \n");
scanf("%d",&n);
if (n>=100) {
printf("Niepoprawna liczba, podaj liczbe z zakresu <=100.\n");
printf("Podaj n: \n");
}

printf("podaj tablice\n");
for (i=0; i<n; i++)
    scanf("%d",&*(tab+i));

printf("\ntab od tylu");
for (i=n-1; i>=0; i--)
    printf("%d\n",*(tab+i));


getch();
return 0;

}

Ale nie do końca mi to działa..Byłbym wdzięczny o wyrozumiałość i pomoc, bo dopiero zaczynam zabawę z językiem C.

Z góry dzięki za pomoc ;)

1

Szczerzę to nie rozumiem za bardzo tego co napisałeś w okolicach pętli for :) Myślę, że chciałeś stworzyć coś w tym stylu :

 
#include <stdio.h>

int main()
{
    int i,n;
    int *tab;
    do{
        printf("Podaj ile liczb chcesz wpisac: ");
        scanf("%d",&n);
    }while( n>100 || n<=0 );

    printf("Podaj te liczby:\n");
    tab = new int[n];

    for( i=0; i<n; i++ )
       scanf("%d",(tab+i));

    printf("Wypisane:\n");

    for( i=n-1; i>=0; i-- )
       printf("%d\n",*(tab+i));

    return 0;
}

Mam nadzieję, że pomogę.

 *( tab+i )

Jak wiemy nazwa jest od razu wskażnikiem na 0 element tablicy, a kolejne elementy tablicy możemy uzyskać dodając kolejne liczby do wcześniejszej wartości. Dzięki "*" wyciągamy wartość z pamięci na jaką wskazuje wskażnik. Mam nadzieję, że wszystko dobrze zrozumiałem i tak ma to wyglądać :)

0

Ok, dzięki wielkie za pomoc :)

Niestety wyskakuje mi błąd:

fa514d52b5.png

1

Ehm. Chyba niezbyt lapiesz ten jezyk.

Zaczniemy od tego co juz masz, tj. wczytanie ile liczb ma byc podanych.

int n;
scanf("%d", &n);

Teraz trzeba utworzyc tablice o rozmiarze n. Tablica ta ma przechowywac liczby rzeczywiste, wiec naturalnym wyborem jest typ float/double.

double* array  = (double*) malloc(n * sizeof(double));

Co tu sie dzieje?
malloc alokuje podana liczbe bajtow na stercie. Jako, ze jedna liczba typu double potrzebuje X bajtow pamieci, a my potrzebujemy n takich liczb, to alokujemy n * X bajtow. Naszym X jest rozmiar zmiennej typu double, ktory otrzymujemy przez uzycie operatora sizeof(). Majac juz zaalokowana pamiec, przypisujemy jej adres do wskaznika array.

Dobra, mamy juz zaalokowane miejsce w pamieci, czas na poproszenie uzytkownika o podanie tych liczb.

for(int i = 0; i < n; ++i) {
  scanf("%lf", (array + i));
}

Skoro mamy wskaznik, pokazujacy w pewne miejsce pamieci, mozemy dodac do niego liczbe X i wskazac w miejsce pamieci oddalone o X * sizeof(typ_wskaznika) bajtow, np.
Majac wskaznik typu int* o nazwie p, przechowujacy adres 0x1234. Po dodaniu do niego wartosci 2, otrzymamy wskaznik przechowujacy adres 0x1234 + 2 * sizeof(int).

Twoje zadanie:
#Zacznij myslec, a nie kopiowac kod z forum.
#Dodaj walidacje danych wejsciowych.
#Sklej to w calosc.

0

Dobra to skleciłem to tak:

#include <stdio.h>
#include <conio.h>

int main()
{
int i, n, tab[100];
double* array = (double*) malloc(n * sizeof(double));
printf("Podaj ile liczb chcesz wpisac: ");
scanf("%d",&n);
printf("Podaj te liczby: ");

for (i=0; i<n; ++i){
    scanf("%lf",(array +i));
}
for (i=n-1; i>=0; --i){
    printf("%lf\n",*(array +i));

}
getch();
return 0;
}

Wszystko ok tylko pokazuje mi liczby w formacie 2.000 i nie wiem jak to zmienić..

0

Hmm.. może spróbuj zamienić:
printf( "%lf\n", *( array +i ) )
Na:
printf( "%g\n", *( array +i ) )

0

Cześć,
Potrzebuję Waszej pomocy, wiecie może jak zamienić ten kod http://pastebin.com/8jsAtHBM tak aby były dwie pętle, chciałbym pozbyć się IF i w zamian IF zrobć pętle for???

0

Proszę:

for(int i=0,j=0;i<=ROZMIAR;i+=2,++j) tab2[j]=tab[i];
for(int i=0,j=1+(ROZMIAR>>1);j<=ROZMIAR;i+=2,++j) tab2[j]=-0.5*(tab[i]+tab[i+2]-(2*tab[i+1]));

z tym że wydaje mi się że tu tab[i+2] wykraczasz poza tablicę.

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