• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zamiana pierwszego elementu tablicy z ostatnim język C

Object Storage Arubacloud
0 głosów
206 wizyt
pytanie zadane 26 października 2022 w C i C++ przez patrykpatryczek01 Nowicjusz (200 p.)
Cześć. Ktoś mógłby mnie naprowadzić jak to poprawić?
#include<stdio.h>
#include<stdlib.h>
int tab[6]={3,4,2,7,2,9};
int zamiana(int tab[6]);
int main()
{
  printf("Zamiana to");
  zamiana(tab[6]);
  return 0;
}
  int zamiana(int tab[6])
  {
    int i=0;
    int a=tab[0];
    int b=tab[5];
    for(i=0;i<6;i++)
      {
      if(a==tab[5])
      {
        b=tab[0];
      }
        }
    printf("%d\n",tab[i]);
    return 0;
  }

 

komentarz 26 października 2022 przez Oscar Nałogowiec (29,290 p.)
Po pierwsze - masz zamienic elementy bezpośrednio w tablicy, a nie jakieś tymczasowe zmienne. Po drugie - zamiana drugi raz przywróci stan początkowy, rób to tylko jeden raz, nie więcej.

1 odpowiedź

0 głosów
odpowiedź 27 października 2022 przez VBService Ekspert (252,740 p.)
edycja 27 października 2022 przez VBService

Zrób po prostu np.

[ on-line ]

    int first = tab[0];
    tab[0] = tab[5];
    tab[5] = first;

 

możesz też

[ on-line ]

    tab[0] = tab[0] + tab[5];
    tab[5] = tab[0] - tab[5];
    tab[0] = tab[0] - tab[5];

 

How to swap two numbers without using a temporary variable? ]


tak jak sugeruje @mokrowski w ramach "ciekawostki"

możesz też użyć: bitwise operator

[ on-line ]

tab[0] ^= tab[5] ^= tab[0] ^= tab[5];

 

komentarz 27 października 2022 przez mokrowski Mędrzec (155,460 p.)
Czy sprawdziłeś jak mało efektywny kod generowany jest przy polecanej operacji bitwise? Radzę sprawdzić zanim będziesz polecał to rozwiązanie poza kontekstem... ciekawostki.
komentarz 27 października 2022 przez VBService Ekspert (252,740 p.)
Dlatego napisałem "możesz też", OP może sam to sprawdzić.
komentarz 27 października 2022 przez mokrowski Mędrzec (155,460 p.)

Znów. Operacja dodawania/odejmowania dla typów ze znakiem, przy przepełnieniu daje UB. Stąd poprzez dodawanie odejmowanie oraz (pod linkiem) poprzez negację bitową, nie jest polecana. Standard języka C nie definiuje sposobu zapisu liczb ze znakiem. Nie można więc zakładać że to uzupełnienie do 2 na każdej platformie i w każdym przypadku. Przykro mi. Radzę uważać akurat z tymi poradami dla C i C++ pod linkiem.

BTW. Standard nie definiuje także jak bity przesuwane w prawo lub lewo wpływają (i czy wpływają) na znak. Polecam zapoznać się z: https://en.wikipedia.org/wiki/Integer_set_library oraz https://en.wikipedia.org/wiki/Integer_set_library

 

Podobne pytania

0 głosów
1 odpowiedź 366 wizyt
pytanie zadane 9 października 2016 w C i C++ przez makkor Początkujący (310 p.)
0 głosów
0 odpowiedzi 163 wizyt
pytanie zadane 20 lipca 2022 w PHP przez mat19 Obywatel (1,580 p.)
0 głosów
1 odpowiedź 211 wizyt

92,551 zapytań

141,393 odpowiedzi

319,523 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...