[C] Wyrzucenie wybranego elementu z tablicy. Gdzie jest błąd


(system) #1

Witam! Muszę napisać program, który wyrzuca wybrany element z tablicy. Napisałem, ale coś w nim nie działa. Proszę o wskazanie błędu.

#include 


void tablica(int t[], int c, int d);



int main(void)

{

  int a,b, i;

  int tab[100];

  printf("Podaj liczbe elementow, ktore chcesz wpisac do tablicy\n");

  scanf("%d", &a);

  printf("Podaj numer elementu tablicy, ktory ma nie byc wyswietlany\n");

  scanf("%d", &b);

  printf("\n\n");

  if (a<100 && b<=a)

  {

  for (i=0; i
  {

      printf("Wpisz wartosc %d elementu tablicy\n", i+1);

      scanf("%d", &tab[i]);

      fflush(stdin);

  }

  printf("\n\nTak wyglada Twoja tablica po usunieciu %d elementu\n", b);

  for (i=0; i
  {

    tablica(tab,b,a);

    printf("%d \t", tab[i]);

  }

  }

  else printf("Chcesz wpisac zbyt duzo elementow. Element, który chcesz wyciac nie jest zapisany w tablicy. Sprobuj jeszcze raz");



  system("PAUSE");	

  return 0;

}


void tablica(int t[], int c, int d)

{

 int temp;

 temp=t[c];

 t[c]=t[c-1];

 t[c-1]=temp;

}

[/code]

(Drobok) #2

Twoja funkcja nie usuwa elementu z tablicy, tylko zamienia elementy o danych index'ach


(system) #3

A mógłbyś wskazać, gdzie jest błąd, tak żeby nie wyświetlało jednego, wybranego elementu tablicy?


(Sawyer47) #4

Jeśli chcesz jedynie nie wyświetlać jednego elementu, to możesz zrobić

for (i = 0; i < TABLEN; ++i) {

  if ( i != b) {

    printf("%d ", tab[i]);

  }

}

(system) #5

Tylko to musi być napisane w funkcji. Generalnie to jest program z kolokwium, które dostaliśmy do napisania w czasie 15min. Zaliczyły 2os z 15.


(system) #6

Zawsze możesz utworzyć temp_tab i tam skopiować elementy oprócz tego, który ma zostać usunięty.


(system) #7

a dokładnie w jakie sposób?


(Krzychu91prog) #8

To może by tak dokładna treść zadania? Z wszystkimi ograniczeniami i założeniami, twoje "wyrzuca z tablicy" można różnie zrozumieć. A samo usuwanie elementu z tablicy można zrobić na wiele sposobów.

Ymmm... jeszcze jedno... to ma być napisane w czystym 'C' tzn nie pomyliłeś C a C++?


(system) #9

Ma być napisane w czystym C. A polecenia nie było jednoznacznego. Brzmiało mniej więcej tak. "Program z zastosowaniem tablicy w funkcji. Wpisz do tablicy dowolną ilość elementów, nie większą niż 100. Wyświetl na ekranie wszystkie elementy tabeli, bez elementu wybranego przez użytkownika. Macie 15min."


(Pablo_Wawa) #10

Zmodyfikuj wywołanie funkcji tablica:

tablica(tab,b,&a);

oraz jej kod:

void tablica(int t[], int c, int *d)

{

  t[c]=t[*d-1];

  *d--;

}

Musisz po prostu przenieść ostatni element tablicy w miejsce usuwanego elementu i zmniejszyć liczbę elementów tablicy. Poza tym popraw dalszą część kodu

printf("\n\nTak wyglada Twoja tablica po usunieciu %d elementu\n", b);

  for (i=0; i
  {

    tablica(tab,b,a);

    printf("%d \t", tab[i]);

  }

Po wywołaniu funkcji tablica(tab,b,&a) wartość zmiennej a będzie o 1 mniejsza, więc potem w pętli nie musisz stosować zapisu i

tablica(tab,b,&a);

  printf("\n\nTak wyglada Twoja tablica po usunieciu %d elementu\n", b);

  for (i=0; i
  {

    printf("%d \t", tab[i]);

  }[/code]

(system) #11

Napisałem to tak :

extern "C"{

#include 

const int rozmiar = 20;


void usun_element(int usun, int tab_temp[], int ile, int tab[]);


int main(void){

	int tab[rozmiar], ile, usun, i, tab_temp[rozmiar];

	printf("Podaj liczbe elementow, ktore chcesz wpisac do tablicy\n");

	scanf("%d",&ile);

	for(i = 1; i < ile+1; i++){

		printf("Element [%d] -> ",i);

		scanf("%d",&tab[i]);

	}

	printf("Podaj element, ktory ma zostac usuniety z tablicy : \n");

	scanf("%d",&usun);

	usun_element(usun,tab_temp,ile,tab);

}


void usun_element(int usun, int tab_temp[], int ile, int tab[]){

    int i, j, temp;

    j = 0;

    for (i =1; i < ile+1; i++){

        temp = tab[i];

        if (temp!=usun){

            tab_temp[j] = temp;

            j++;

        }

    }

    for (i = 1; i < ile+1; i++)

        tab[i] = 0;

    for (i = 0; i < j; i++){

        temp = tab_temp[i];

        tab[i] = temp;

    }

    printf("TABLICA : \n");

    for (i = 0; i < j; i++)

        printf("%d ",tab[i]);

}}

Oczywiście metod jest wiele.

EDIT ----

Bez elementu tablicy wystarczy po prostu wypisać elementy różne != a