C++/ funkcje i wskaźniki. PROGRAM!!

0

Mam problem z napisaniem programu, może ktoś miałby chwile czasu aby mi pomóc:

Napisz funkcje, która zamieni kolejność wybranego zakresu <p,k> wyrazów w tabeli N wymiarowej.
UWAGA!!!!
W programie można zadeklarować maksymalnie jedną tabele.

Przykład:
wymiar tabeli N=10
wyraz poczatkowy= 3
wyraz końcowy= 6
wyraz tabeli Tab= [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

wynik działania programu: tabOdw= [ 1, 2, 6, 5, 4, 3, 7, 8, 9, 10]

0

A to co juz zrobiłeś to gdzie? Z czym masz problem?

0

jestem mało zaawansowany, więc ciężko idzie mi pisanie sam napisałem

#include<cstdlib>
#include <iostream>

using namespace std;

float tab[10]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int p,k;
float a;
void zam(int p,int k, int tab [])
{
a=tab[p];
tab[p]=tab[k];
tab[k]=a;

while(p<k)
      {
		zam(p,k);
        p++;
		k--;
	  }

}

int main()
{


cout<<" tab 1, 2, 3, 4, 5, 6, 7, 8, 9, 10"<<endl;
int p,k;
cout<<"podaj wyraz poczatkowy"<<endl;
cin>>p;
p--;
cout<<"podaj wyraz koncowy"<<endl;
cin>>k;
k--;




cout<<endl<<"tablica odw ";
for (int n=0; n<10;n++)
	cout<<tab[n]<<' ';


system("PAUSE");
return EXIT_SUCCESS;
}
0

oto rozwiazanie:

w tym przypadku zostanie zamieniony index 3 z 6 (czyli cyfra 4 z cyfrą 7 - indexy tablicy sa od zera !)

#include <iostream>
using namespace std;

const int N=10;

void zamien(int index1, int index2, int tablica[]){

	int temp = tablica[index1];
	tablica[index1] = tablica[index2];
	tablica[index2] = temp;
}

int main(){

	int tab[N]={1,2,3,4,5,6,7,8,9,10};

	cout<<"Tablica przed zamiana: ";
	for (int i=0; i<N; i++) cout << tab[i]<< ", ";

	//zamieni index 3 z 6
	zamien(3,6,tab);

	cout<<"\nTablica po zamianie: ";
	for (int i=0; i<N; i++) cout << tab[i]<< ", ";
	

cout<<"\n\n";
system("pause");
return 0;
} 
0

To zadanie jest banalne.
Po pierwsze robisz sobie pętle od 0 do (k-p)/2
Po drugie w pętli tworzysz zmienną pomocniczą i nadajesz jej wartość tab[p+i]
tab[p+i] nadajesz wartość tab[k-i]
tab[k-i] nadajesz wartość tmp;

I to na tyle z zadania. Rozwiązanie ograniczało się, do spojrzenia jak to wygląda na kartce.
P.S adrian622 nie pisz mu tego, niech chociaż przepiszę, to co mu podpowiedziałem.

0

tak pomysł dobry ale nie uwzględniłeś tego ze jeśli po podzieleniu (k-p)/2 wyjdzie nie parzysta liczba to zaokrągli w dół i pętla nie wykona się tyle razy ile potrzeba.
jak zaokrąglić wynik w gore nie zamieniając zmiennych na float (funkcja ceil nie przyjmuje intow) ??


#include <iostream>
using namespace std;
 
const int N=10;
 
void zamien(int index1, int index2, int tablica[]){
 
int temp=0;
 
        for(int i=0; i< (index2-index1)/2 ;i++){   //   (6-3)/2 = 1,5  - zaokragla do 1 zamiast do 2
        
        temp = tablica[index1];
        tablica[index1] = tablica[index2];
        tablica[index2] = temp;
 
        index1++;
        index2--;
 
        }
        
}
 
int main(){
 
        int tab[N]={1,2,3,4,5,6,7,8,9,10};
 
        cout<<"Tablica przed zamiana: ";
        for (int i=0; i<N; i++) cout << tab[i]<< ", ";
 
        zamien(3,6,tab);
 
        cout<<"\nTablica po zamianie: ";
        for (int i=0; i<N; i++) cout << tab[i]<< ", ";
 
 
cout<<"\n\n";
system("pause");
return 0;
} 

0
#include <iostream>
using namespace std;
void Print(int* tab,const int n){
    for(int i=0;i<n;i++)
       cout<<*(tab+i)<<",";
}
int* Change(int* tab,const int n,const int p ,const int k){
    for(int i=0;i<=((k-p)/2);i++){
        int tmp = *(tab+i+p);
        *(tab+i+p) = *(tab+k-i);
        *(tab+k-i) = tmp;
    }
    return tab;
}
int main(){
    int n,p,k;
    cin>>n;
    int* tab = new int[n];
    for(int i=0;i<n;i++)
       *(tab+i)=i;
    cin>>p;
    cin>>k;
    Print(Change(tab,n,p,k),n);
    delete [] tab;
    return 0;
}

Uwzględniłem to, ale Ty nie potrafisz czytać a oprócz tego prosiłem, żebyś nie wstawiał tu swoich wypocin.

0

Najprościej chyba będzie wykonywać pętlę while-m dopóki index1 nie będzie większy lub równy index2. Najpierw zamieni pierwszy element z ostatnim, potem drugi z przedostatnim itd, aż dojdzie do "środka" zakresu do zamiany.

w tym przypadku zamieni 6 i 3, potem 5 i 4 a potem się "rozminą" i już się kolejna zamiana nie wykona. W zasadzie można by zostawić samo index 1 większy od index 2 ale wtedy może dokonywać niepotrzebnie zamiany komórki samej ze sobą

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