niedokładne odwracanie elementów

0

Witam. Napisałem sobie program do odwracania elementów wprowadzonych do tablicy. Niestety program niedokładnie odwracanie elementy. Kilka razy edytowałem już kod,ale niestety program nadal nie działa dobrze :(. Proszę o Pomoc. Z Góry Dziękuje za Odpowiedź :)

#include <stdlib.h> 
#include <stdio.h> 
 

int main() 
{    
    int tab[10];
	int d,i,n;
 do{
   
 printf("Wprowadz <=10 elementow do tablicy: \n");
 d=scanf("%d", &n);
 } while (d==0 || n>10);

 for(i=0; i<n; i++) 
 { 
 printf("Podaj %d element tablicy: ", i+1); 
 scanf("%d", &tab[i]); 
 } 
  
  
 printf("\nElementy wprowadzone do tablicy: \n"); 
 for(i=0; i<n; i++) 
 {      
 printf("%d\n", tab[i]);  
 } 

 printf("\nWprowadzone elementy w odwrotnej kolejnosci: \n"); 
 for (i=n; i>0; i--) 
 { 
 printf("%d\n", tab[i]); 
 } 

    return 0; 
} 
3
  1. fatalne formatowanie kodu. Jak nie umiesz sam to http://format.krzaq.cc
  2. <cod​e=​c> będzie kolorować składnię
  3. chcesz odwrócić kolejność elementów tablicy czy tylko wyświetlić w odwrotnej kolejności?
  4. w obecnej wersji, dla n == 3, w ostatniej pętli i przyjmie wartości 3, 2, 1, czyli wyświetlisz odpowiednio czwarty, trzeci i drugi element tablicy 3-elementowej. Wyjście poza zakres to UB. Odczytanie niezainicjalizowanej zmiennej to UB.
0

odwrócić kolejność elementów

2
void reverse(int*b, int*e){
	while(e --> b){
		int tmp = *b; // swap
		*b = *e;
		*e = tmp;
		b++;
	}
}

i potem

reverse(tab, tab+n);

http://melpon.org/wandbox/permlink/Lm5bMDl5npwQdyrF

Pewnie można zapisać to ładniej, ale działa.

0

reverse działa w C? czytałem,że reverse tylko w c++

1

To nie jest std::reverse z biblioteki standardowej C++, tylko funkcja reverse, której ciało nawet umieściłem w poście.

2
#include <stdlib.h> 
#include <stdio.h> 

int main() 
  {    
   int tab[10],tmp;
   unsigned i,k,n;
   for(;;)
     {
      printf("Wprowadz rozmiar tablicy 2..10: ");
      if((scanf("%u",&n)==1)&&(2<=n)&&(n<=10)) break;
      printf("Blad wprowadzenia\n");
     }
   for(i=0;i<n;++i) 
     { 
      printf("Podaj %d element tablicy: ",i+1); 
      scanf("%d",tab+i); 
     }
   printf("\n");
   printf("Elementy wprowadzone do tablicy: "); 
   for(i=0;i<n;++i) printf("%d ",tab[i]);
   printf("\n");
   printf("Wprowadzone elementy w odwrotnej kolejnosci: "); 
   for(i=n;i--;) printf("%d ",tab[i]);
   printf("\n");
   printf("Wprowadzone elementy po odwroceniu: "); 
   for(i=0,k=n;i<--k;++i) tmp=tab[i], tab[i]=tab[k], tab[k]=tmp;
   for(i=0;i<n;++i) printf("%d ",tab[i]);
   printf("\n");
   return 0; 
  }

http://ideone.com/4k1EMt

0

Dzięki Wielkie :) Porównam z moim kodem i popatrzę gdzie mogłem lepiej zdefiniować kod :) Pomoże mi to w nauce :)

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