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

Zamiana miejsc elementów tablicy.

Object Storage Arubacloud
0 głosów
4,645 wizyt
pytanie zadane 21 września 2016 w C i C++ przez Xabi14 Nowicjusz (150 p.)

Witam, mam do napisania program, który będzie używał kilku funkcji. Pierwsze 3 działają bez zarzutu, natomiast przy funkcji 4, która ma zamienić miejscami elementy tablicy, po uruchomieniu programu, tak jak wspomniałem, wykonują się 3 funkcje, a 4 jest traktowana tak, jakby w ogóle jej nie było. Tak naprawdę jestem baaaaardzo zielony, jeśli chodzi o programowanie, więc jeśli ktoś mógłby mi to łopatologicznie wytłumaczyć, będę niezmiernie wdzięczny.

Oto kod:

#include<iostream>
using namespace std;

void wpisz(int t[],int r);
void wypisz(int t[],int r);
int max(int t[],int r);
int przestawienie(int t[],int r);

int main()
{
 int tab[10];
 
 wpisz(tab,10);
 wypisz(tab,10);
 cout<<"max="<<max(tab,10);
 przestawienie(tab,10);
 
 system("PAUSE");
 return 1;
 
}

void wpisz(int t[],int r)
{
 for(int i=0;i<r;i++)
 	{
	cin>>t[i];
 	}	
}

void wypisz(int t[],int r)
{
 for(int i=0;i<r;i++)
 	{
	cout<<t[i]<<endl;
 	}	
}

int max(int t[],int r)
{
 int kartka=t[0];
 for(int i=0;i<r;i++)
 	{
    if(t[i]>kartka) kartka=t[i];    
 	}
 return kartka;
}


int przestawienie(int t[],int r)
{
 int a=t[0];
 for(int i=0;i<r-1;i++)
 t[i]=t[a];
 t[r-1]=a;
}

3 odpowiedzi

+1 głos
odpowiedź 21 września 2016 przez elik1028 Użytkownik (950 p.)
wybrane 21 września 2016 przez Xabi14
 
Najlepsza
Nie powiedziałeś co chcesz osiągnąć, więc powiem Ci co robi ostatnia funkcja. Przyjmuje dwie zmienne: tablice liczb całkowitych i jedną liczbę całkowitą. Wewnątrz tworzy zmienną typu int o nazwie a, której nadano wartość pierwszego miejsca w tablicy. Stworzona jest pętla for, która ma zostać zakończona kiedy zmienna i stworzona na jej potrzeby będzie większa, niż r-1. W środku pętli jest zamieszczona instrukcja wykonująca nadanie w tabeli, w miejscu o wartości i; nadawana jej jest wartość należąca do tabeli o miejscu a. Na sam koniec, już poza pętlą for zmieniasz wartość slota r-1 na wartość zmiennej a. Funkcja nic nie zwraca. Nie dziw się , że nie widzisz zmian ponieważ funkcja zawsze kopiuje podane przez Ciebie wartości na własne potrzeby i używa ich, żeby ujrzeć zmiany musisz podać adres tablicy - nie tablice.
komentarz 21 września 2016 przez Xabi14 Nowicjusz (150 p.)
Ok, teraz już wszystko wiem. Program poprawiony i wszystko działa. Dziękuję.
+1 głos
odpowiedź 21 września 2016 przez L33TT12 Gaduła (3,950 p.)
Nie próbowałem kodu u siebie, ale z tego co widzę to ta funkcja wykonuje się na 100%, tylko po wykonaniu tej funkcji program przechodzi dalej, czyli do system("pause"), wiec nawet nie próbujesz wyświetlić nowej zawartości.
komentarz 21 września 2016 przez Xabi14 Nowicjusz (150 p.)
Jeśli usunę system("pause"), to również nie wyświetla nowej zawartości. Wtedy po prostu robi to, co do tej pory i zamyka program od razu. Zastanawiam się, czego brakuje, żeby wyświetlał już pozmieniane elementy. Tak jak mówiłem, jestem nowicjuszem, więc nie za bardzo orientuję się, czego może brakować. Na chłopski rozum będzie to coś w samej funkcji, ale nie mam pojęcia co, stąd moje pytanie.
komentarz 21 września 2016 przez L33TT12 Gaduła (3,950 p.)
przestawienie(tab,10);
  
 system("PAUSE");

Masz taki kod, więc czego tutaj oczekujesz? Tablica się najprawdopodobniej przestawia (nie patrzałem w kod), a potem program dochodzi do instrukcji system("pause), wiec zatrzymuje działanie, tak jak pisałem wyżej, po zamienionych elementach nie masz instrukcji wyświetlającej, wiec zamień to na

 przestawienie(tab,10);
wypisz(tab,10);

 

0 głosów
odpowiedź 21 września 2016 przez MetRiko Nałogowiec (37,110 p.)

Nie wiem czy tak miało być (nie analizowałem całego kodu) ale w tym miejscu:

int przestawienie(int t[],int r)
{
 int a=t[0]; //<- Tutaj zapisujesz wartość z tablicy
 for(int i=0;i<r-1;i++)
 t[i]=t[a]; //<- Tutaj odwołujesz się do elementu tablicy t[a], gdzie a jest równe t[0] w takim razie ten zapis można przedstawić w takiej postaci: t[i]=t[t[0]];
 t[r-1]=a;
}

 

komentarz 21 września 2016 przez Xabi14 Nowicjusz (150 p.)
Znaczy się, to jest chyba tylko zmiana zapisu, tak?
A mnie rozchodzi się o to, dlaczego po uruchomieniu programu i przerobieniu pierwszych trzech funkcji (wpisanie, wypisanie, podanie elementu maksymalnego), przy funkcji czwartej nic się nie dzieje, tak jakby po prostu program kończył działanie po trzeciej funkcji.
komentarz 21 września 2016 przez niezalogowany

Ta funkcja przestawia elementy, ale ich nie wypisuje :) Musisz w jej ciele dodać:

 

int przestawienie(int t[],int r)
{
 int a=t[0]; //<- Tutaj zapisujesz wartość z tablicy
 for(int i=0;i<r-1;i++)
 t[i]=t[a]; //<- Tutaj odwołujesz się do elementu tablicy t[a], gdzie a jest równe t[0] w takim razie ten zapis można przedstawić w takiej postaci: t[i]=t[t[0]];
 t[r-1]=a;
 cout<<endl;
 wypisz(t, r);
}

Ewentualnie w mainie możesz po wykonaniu tej funkcji dodać wypisz. 

Podobne pytania

+1 głos
2 odpowiedzi 1,812 wizyt
0 głosów
2 odpowiedzi 4,389 wizyt
pytanie zadane 30 maja 2016 w C i C++ przez zuzka_kotek Początkujący (290 p.)
0 głosów
0 odpowiedzi 116 wizyt
pytanie zadane 8 stycznia 2018 w SQL, bazy danych przez Grzegorz Mikina Dyskutant (8,060 p.)

92,536 zapytań

141,376 odpowiedzi

319,451 komentarzy

61,920 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!

...