Skocz do zawartości
ArtifeX

Programik - Pomocy

Rekomendowane odpowiedzi

Witam czy ktos moglby mi pomoc jak sie do napisana tego programy zabrac?

 

"

Dany jest ciąg liczbowy a[1], a[2],..., a[n]. Napisać program, który realizyje przesunięcie cykliczne elementów ciągu o k (k>0) pozycji w lewo, tzn. tworzy ciąg: a[k+1], a[k+2],..., a[n], a[1], a[2],..., a[k]

"

Z gory dziekuje za wszelka pomoc.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Tablice

 

Ale w czym??

Jaki język??

Różnie można do tego podejść np w Javie to będzie bardzo proste.

Sprecyzuj co ma dokładnie robić ten program ?"przesunięcie cykliczne"

Kiedy ma nastąpić? Jak zajdą jakieś szczegulne warunki? Czy poprostu jak tablica się przepełni , to wtedy następny element zapisywany jest na pozycji en minus ka , a reszta przesuwa się o jeden w stronę en?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Program ma byc w C, na poczatku program ma alokowac w tablicy ciag liczb (n) podanych przez uztykownika, nastepnie program ma przesowac caly ciag liczb o k (podane przez uzytkonika) w lewo (np o 3 w lewo). Tylko ze nie wiem jak sie do niego zabrac.

Prosze niezmiernie o pomoc

Edytowane przez ArtifeX

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

no a czego konkternie nie wiesz? - bo napisales w sumie co trzeba zrobic :]

zacznij pisac, nie wierze ze dostales zadanie nie znajac chociaz komend printf,scanf lub cout, cin, lub malloc. przegladnij notatki na pewno znajdziesz co potrzeba - nie oczekuj ze ktos zrobi zadanie za ciebie

 

dopisze tylko ze:

 

allokacja tablicy n elementowej wyglada tak:

 

double *tablica = (double*)malloc((unsigned)n*sizeof(double));
Edytowane przez ayem

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

pls - wklejej kod w tagu CODE.

 

z twoj problem polega na tym ze tworzac nowa zmienna NIEGLOBALNA nie jest ona defaultowo zerowana, jak chcesz zeby w niej byly liczy 0-n to musisz ja sobie sam wypelnic.

 

(najlepiej tez forem od i do n, gdzie do kolejnych elementow tabliczy przypisujesz i)

 

np tak:

 

for(i=0;i<n;i++)  tablica[i]=i;

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

a jaki masz na to pomysl, bez przesady ze nie masz zadnego pomyslu, rusz mozgownica troche

 

sorrki nie zauwazylem ze zrobilem bleda :|

 

podalem ci deklaracje tabica jako double, zmieniles sobie na int ale wtedy malloc bedzie wygladal:

 

int *tablica = (int*)malloc((unsigned)n*sizeof(int));

 

sorrki za blad

Edytowane przez ayem

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Poczekajcie.

 

No i mamy tablice z indeksami od zera do en , nie można jej przesunąć o ka w lewo bo pierwszy indeks byłby równy zero minus ka a ostatni en minus ka.

Widzieliście tablicę z ujemnymi indeksami?

Ja proponuje tu warunek:

Przesuwać wartości od jakiegoś miejsca (od kturegoś indeksu) na przykład igrek wiekszego od zera i mniejszego od en , przy podawaniu o ile przesunąć tablicę trzeba sprawdzić czy zadana wartośc przesunięcia te jest mniejsza równa igrek , gdy tak można kontynułować.

Albo zrobić to tak że zadajemy o ile w lewo np pieć , pięć pierwszych elementów ciągu zapisujemy w pomocniczej tablicy temp_tab, resztę zapisujemy w innej tablicy (zaczynając od indeksu zero a kończąc na indeksie en minus pięć)

(przydzielamy jej tak samo pamięć jak naszej tablicy wyjściowej czyli takim samym mallokiem) ,

póżniej zaczynając od indeksu en minus pięć wpisujemy do naszej pomocniczej tablicy zawartośc tablicy temp_tab , wypisujemy zawartośc naszej pomocniczej tablicy na ekran i co robimy? i sie cieszymy bo działa

i po wszystkim

Bedziesz mogł o 100 przesunąć w lewo gdy tylko sam do tego dojdziesz jak , podpowiedz:

sto podziel przez swoj rozmiar tablicy

 

(można pobawić się w przesunięcie całej tablicy w pamięci ale to chyba nie o to chodzi)

int main(){int n,i,j,k;int z =0;   printf("Z ilu n elementow ma skladac sie ciag liczb (n>0): ");             scanf("%d",&n);for(i=0;i<n;i++)               tablica[i]=i;   printf("\n\nCiag wyglada nastepujaco:\n\n");int *tablica = (int*)malloc((unsigned)n*sizeof(int));i=0;for (i=0;i<n;j++)   printf("%d, ",tablica[i]);   printf("\n\n\n");i=0;for(;;)/*pętla będzie sie kręcić aż poniższy warunek w ifie nie zostanie spełniony*/{printf("O ile pozycji ma nastapic przesuniecie cykliczne elementow ciagu w lewo ());             scanf("%d",&k);if(k<n)break;else      { printf("nieopoprawny rozmiar przesunięcia sproboj jeszcze raz");continue;       }         }getch(); /*tutaj zrealizujemy przesunięcie cykliczne w lewo*/int *tab_pom = (int*)malloc((unsigned)n*sizeof(int));int *tab_temp = (int*)malloc((unsigned)k*sizeof(int));for(i=0;i<=k;i++)tab_temp[i] = tablica[i];k++;i=k;for(i=k;i<=n;i++){tab_pom[z]=tablica[i];z++;}i=k;for(i=k;i<=n;i++)tab_pom[i]=tab_temp[i];for(i=0;i<=n;i++){printf(%d,tab_pom[i]);return 0;}
myśle ze powinno zadziałac ale moge sie mylić. :mur:

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

hmm to chyba nie o to chodzi zeby modufikowac zadanie ;)

 

pozatym nie bedzieszmial tutaj zadnych ujemnych indexow bo to mabyc przesuniecie cykliczne, czyli jak cos wykracza poza obszar to laduje na koncu.

 

ogolnie troche zamieszales niepotrzebni :)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Jak mozna po zakonczeniu programu wyczyscic cala pamiec uzywana dotychczas, wszyskie zmienne z scanf i getch().

Z gory dziekuje.

 

Znalazelm cos takiego ale mi chyba nie dziala:

fflush(stdin);

Jeszcze zapytam jak zrobic na koncu programu petle polegajaca na pytaniu czy zakaczyc (t/n) ale tak zeby przy podaniu duzej T automatycznie zamieniana byla na mala t.

 

                     do{scanf("%s",&pyt);//tolower(pyt); //ZAMIANA POBRANEGO ZNAKU NA MALE <- to mi nie dziala :(}while (pyt=='t');

i jeszcze ostatnie przy wprowadznia danych z klawiatury gdzie tzeba podac warotsc liczbowa a poda sie znak co zrobic aby program sie nie wylaczam, domyslam sie ze ma byc to petla ale jak jej uzyc i jak uzyc polecenia isalpha();

 

Dziekuje

Edytowane przez ArtifeX

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

do{scanf("%s",&pyt);//tolower(pyt); //ZAMIANA POBRANEGO ZNAKU NA MALE <- to mi nie dziala :(}while (pyt=='t');
co tu nie działa? Opisz symptomy.

tlumaczenie kodu na polski:

 

zrób(do) skanowanie(scanf) i zapisz wynik w zmiennej "pyt" ,

przerób (tolower) zmienną "pyt" na małe litery ,

gdy(while) zmienna "pyt" to małe "te" powtóż jeszcze raz zrób (do)(a co za tym idzie to i scanf i tolower)

Bo ja widze że nie ma wyjścia z tej pętli.(gdy podajesz w scanf "te")

proponuje :

scanf("%s",&pyt);tolower(pyt); switch(pyt){case(t):{//kod do wykonania gdy pyt to te;break;}case(n):{//kod do wykonania gdy pyt to en;break;}defoult:{//kod do wykonania gdy ani en ani te;break;}}

Jeszcze zapytam jak zrobic na koncu programu petle polegajaca na pytaniu czy zakaczyc (t/n) ale tak zeby przy podaniu duzej T automatycznie zamieniana byla na mala t.

O co chodzi?? O to żeby program się wykonał jeszcze raz , lub zeby sie wyłączył?

 

 

zmienne ze skanf i getch możesz jedynie nadpisać ; funkcja fflush(stdin) oprużnia jedynie bufor standardowego wejścia;

 

a co do wyłączania się programu gdy wprowadzisz znak nie lidzbę to znajdz gdzieś opis funkcji scanf, gdy nastąpi próba zapisania np do integer chara to sie wyłoży

Użyj gets albo innej funkcji (tego to nie jestem pewien z tym scanf ale z tego co pamiętam...)

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...