ArtifeX Opublikowano 16 Stycznia 2005 Zgłoś Opublikowano 16 Stycznia 2005 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. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Sid Opublikowano 16 Stycznia 2005 Zgłoś Opublikowano 16 Stycznia 2005 Po pierwsze troszke jaśniej, bo nie rozumiem(chyba że to dlatego że się dopiero obudziłem ;) ). Po drugie nie wróże topicowi przyszłości bo to zadanie jest ;) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Contrast Opublikowano 16 Stycznia 2005 Zgłoś Opublikowano 16 Stycznia 2005 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? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ArtifeX Opublikowano 16 Stycznia 2005 Zgłoś Opublikowano 16 Stycznia 2005 (edytowane) 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 16 Stycznia 2005 przez ArtifeX Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 16 Stycznia 2005 Zgłoś Opublikowano 16 Stycznia 2005 (edytowane) 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 16 Stycznia 2005 przez ayem Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 17 Stycznia 2005 Zgłoś Opublikowano 17 Stycznia 2005 no bo nie ma prawa dzialac. elementy talbicy jak chcesz wyswietli po kolei to robi sie forem: for (int i=0;i<n;i++) printf("%d, ",tablica[i]);printf("\n"); Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 18 Stycznia 2005 Zgłoś Opublikowano 18 Stycznia 2005 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; Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 18 Stycznia 2005 Zgłoś Opublikowano 18 Stycznia 2005 (edytowane) 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 18 Stycznia 2005 przez ayem Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Contrast Opublikowano 19 Stycznia 2005 Zgłoś Opublikowano 19 Stycznia 2005 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: Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ayem Opublikowano 19 Stycznia 2005 Zgłoś Opublikowano 19 Stycznia 2005 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 :) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
ArtifeX Opublikowano 19 Stycznia 2005 Zgłoś Opublikowano 19 Stycznia 2005 (edytowane) 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 19 Stycznia 2005 przez ArtifeX Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Contrast Opublikowano 19 Stycznia 2005 Zgłoś Opublikowano 19 Stycznia 2005 Jakbyś przeczytał całego mojego posta dokładnie to byś nie napisał: pozatym nie bedziesz mial tutaj zadnych ujemnych indexow bo to mabyc przesuniecie cykliczne, czyli jak cos wykracza poza obszar to laduje na koncu. I tak sie stanie. Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Contrast Opublikowano 19 Stycznia 2005 Zgłoś Opublikowano 19 Stycznia 2005 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...) Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...