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

Zamiana miejsc elementów tablicy.

Fiszki IT
Fiszki IT
0 głosów
2,630 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,130 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,239 wizyt
0 głosów
2 odpowiedzi 3,537 wizyt
pytanie zadane 30 maja 2016 w C i C++ przez zuzka_kotek Początkujący (290 p.)
0 głosów
0 odpowiedzi 74 wizyt
pytanie zadane 8 stycznia 2018 w SQL, bazy danych przez Grzegorz Mikina Mądrala (6,340 p.)
Porady nie od parady
Odznacz odpowiedź zieloną fajką, jeśli uważasz, że jest ona najlepsza ze wszystkich i umożliwiła ci rozwiązanie problemu.Najlepsza odpowiedź

84,736 zapytań

133,542 odpowiedzi

295,952 komentarzy

56,001 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...