Skocz do zawartości

Temat został przeniesiony do archiwum

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

Deivid22

C, funkcja pomocnicza,char

Rekomendowane odpowiedzi

Witam mam problem z zadaniem. Problem polega na deklaracji funkcji pomocniczej.

 

Zadanie :

Wprowadź napisy do 2 tablic: X:The Y:Beatles.

Wydruki realizuje funkcja pomocnicza.

Oblicz liczbę znaków i wydrukuj dla X i Y.

Zamień znaki X na duże litery,Y na małe litery i wydrukuj dla X i Y.

W programie głównym oblicz ilość znaków dla X i wydrukuj.

 

Tutaj moje wypociny:

 

#include <stdlib.h>
#include <string.h>
char X[] ="The";
char Y[] ="Beatles";
int dlugosc;
int dodaj;
int male;
int duze;
int main()
   {
   dlugosc=strlen;
   printf("Lanuch X ma %d znakow.\n",strlen (X));
   dlugosc=strlen;
   printf("Lancuch Y ma %d znakow.\n",strlen(Y));
   duze=strupr;
   printf("Zamiana lanucha X na duze litery:%s.\n",strupr (X));
   male=strlwr;
   printf("Zamiana lanucha Y na male litery:%s.\n", strlwr(Y));
   dodaj= strcat;
   printf("Lanuch Y po dodaniu X to:%s.\n",strcat(Y,X));
   return 0;
   }

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Po przerobieniu coś takiego stworzyłem

#include <stdlib.h>
#include <string.h>
void drukuj();
char X[] ="The";
char Y[] ="Beatles";
int dlugosc;
int dodaj;
int male;
int duze;

int main()
   {
   printf( "Lanuch X ma %d znakow.\n", strlen (X));
   drukuj();
   int dlugosc=strlen;
   int dodaj=strcat;
   int male =strlwr;
   int duze=strupr;
   return 0;
   }
   void drukuj()
   {
   printf("Lancuch Y ma %d znakow.\n",strlen(Y));
   printf("Zamiana lanucha X na duze litery:%s.\n",strupr (X));
   printf("Zamiana lanucha Y na male litery:%s.\n", strlwr(Y));
   printf("Lanuch Y po dodaniu X to:%s.\n",strcat(Y,X));
   return 0;
   }

 

Ogólnie kompilator nie wypluwa błędów, więc może jest dobrze? Będzie coś z tego czy beznadzieja?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

1.

To nie bardzo ma sens, w zasadzie to w tym kontekście w ogóle nie ma sensu.

C++ by się pewnie wydzierał przy tym co tu napisałeś, bo o ile się nie mylę to zapisujesz tu wskaźnik funkcji. Jeżeli spróbował byś to wypisać to prawdopodobnie dostałbyś wartość wskaźnika.

   int dlugosc=strlen;
   int dodaj=strcat;
   int male =strlwr;
   int duze=strupr;

 

2.

W programie głównym oblicz ilość znaków dla X i wydrukuj.

Co chyba oznacza iż chodzi o obliczenie tego w funkcji main().

 

Czyli możesz zrobić zmienną globalną, zapisać do niej wynik i wypisać go z funkcji pomocniczej: (albo użyć argumentów dla funkcji pomocniczej)

//wersja ze zmienna globalna
#include <stdlib.h>
#include <string.h>
void drukuj();
char X[] ="The";
char Y[] ="Beatles";
int iloscZnakowX;

int main()
   {
   iloscZnakowX = strlen(X); //w ten sposob zapiszesz wartosc w zmiennej

   drukuj();

   return 0;
}

void drukuj()
{
   printf("Lancuch Y ma %d znakow.\n", strlen(Y));
   printf("Lancuch X ma %d znakow.\n", iloscZnakowX);//a tak wypiszesz jej wartosc w funkcji pomocniczej
   printf("Zamiana lanucha X na duze litery:%s.\n", strupr (X));
   printf("Zamiana lanucha Y na male litery:%s.\n", strlwr(Y));
   printf("Lanuch Y po dodaniu X to:%s.\n", strcat(Y,X));
   return 0;
}

 

3. Zmienne których używasz w funkcji main nie są tymi samymi które deklarujesz w przestrzeni globalnej co może być źródłem niezrozumiałych/ciężkich do wykrycia błędów w przyszłości:

//zmienne globalne
int dlugosc;
int dodaj;
int male;
int duze;

int main()
{
   // {...}

   //zmienne lokalne (sa dostepne tylko w main)
   int dlugosc;//...
   int dodaj;//...
   int male;//...
   int duze;//...

   return 0;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

U mnie gcc wywala błędy, że nie wie co to strlen, strcat...

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

brakuje #include <stdio.h>

strupr i strlwr są "nielegalne" tzn. nie są częścią biblioteki standardowej

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dziękuje Panowie. Mam tylko jeszcze jedno szybko pytanie odnośnie kodu

 

 void drukuj()
{
   printf("Lancuch Y ma %d znakow.\n", strlen(Y));
   printf("Lancuch X ma %d znakow.\n", iloscZnakowX);//a tak wypiszesz jej wartosc w funkcji pomocniczej
   printf("Zamiana lanucha X na duze litery:%s.\n", strupr (X));
   printf("Zamiana lanucha Y na male litery:%s.\n", strlwr(Y));
   printf("Lanuch Y po dodaniu X to:%s.\n", strcat(Y,X));
   return 0;
}

 

Dlaczego po przeniesieniu 2 wiersza z tego kodu przed return 0; dodaje łańcuch Y do X? Program pokazuje ,że łańcuch Y ma 10 znaków. Pewnie jakiś banał to jest,ale nie ogarniam tego jeszcze.

 

Chodzi mi o takie coś

 void drukuj()
{
   printf("Zamiana lanucha X na duze litery:%s.\n", strupr (X));
   printf("Zamiana lanucha Y na male litery:%s.\n", strlwr(Y));
   printf("Lanuch Y po dodaniu X to:%s.\n", strcat(Y,X));
   printf("Lancuch Y ma %d znakow.\n", strlen(Y));
   printf("Lancuch X ma %d znakow.\n", iloscZnakowX);
   return 0;
}

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Zadeklaruj tablice i wypełnij ją liczbami podzielnymi przez 5 i mniejszymi od 100.Zrób to za pomocą pętli for.Wyświetl numery elementów i wartości po 5 w jednym wierszu.Za pomocą funkcji pomocniczej , używając wskaźników posortuj tablice malejąco.Funkcja ta ma zwrócić posortowaną tablicę do programu głównego, i ją wydrukować

 

#include <stdio.h>
#include <stdlib.h>
#define N 20
int sortuj();
int i;
int main()
{
   int tab[N]={0,5,10,5,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95};
   for(i=0 ;i<N;i++)
   printf("Elementy tablicy to %d\n",tab[i]);
   return 0;
}

 

Chciałbym uzyskać póki co pomoc ,jak wyświetlić kilka elementów w jednym wierszu. Taki kod jest jak na razie ok czy idzie to inaczej zapisać?

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zamiast \n daj spację lub inny znak rozdzielający. Nową linię wypisz po pętli.

Jak potrzebujesz grupami wypisywać, to potrzeba dwóch pętli.

 

Przy małej liczbie elementów można to zrobić po prostu ręcznie, np. printf("%d %d %d\n",tab,tab[i+1],tab[i+2]). Oczywiście trzeba pamiętać, żeby nie wyjść poza tablicę i licznik w pętli zwiększać o odpowiednią wartość.

 

Uwaga kosmetyczna. Jeżeli masz pętlę z pojedynczą instrukcją, to przy krótkiej można spokojnie dać wszystko w jednej linii. Jeżeli chcesz w dwóch, to przynajmniej daj wcięcie lub normalnie zamknij w klamrach. Będzie łatwiej zorientować się w kodzie.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach
Gość Nareszcie

Kolego Deivid22,

 

z05qv.gif

 

Odpowiedz na Twoje pytanie znajduje sie w pierwszym z brzegu linku z dokumentacja dla "printf": http://www.cplusplus.com/reference/cstdio/printf/

Podpowiedz: "\n" jest znakiem konca wiersza.

 

Dzialasz odwrotnie niz nalezy i z tego wynikaja Twoje problemy. Przeczytaj prosze najpierw fragment ksiazki, a dopiero pozniej zacznij pisac. Inaczej caly czas zacinal sie bedziesz na podstawach skladni. A nie to jest istota programowania.

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

  • Ostatnio przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników przeglądających tę stronę.

  • Tematy

  • Odpowiedzi

    • To jest 120mm wentylator Dla pewności zmierz jeden bok i napisz. Jeżeli jest to jak pisałem 120mm to masz wybór, tylko napisz jakie jest napięcie na obecnym wentylatorze, gdy zasilacz jest w idle - wystarczy go uruchomić na stole z zwartymi zielonym i obojętnie jakimś czarnym. Ta zworka uruchomi zasilanie.
    • kupujesz najtańszy Arctic Cooling F12 bez PWM, rozcinasz wtyczkę, lutujesz i gotowe.
    • No i już widać że kompletnie nie zrozumiałeś co napisałem. Napisałem, że te wykresy zostały później skorygowane. Oba które przytoczyłeś są i były niekompletne i niedokładne już w dniu ich publikacji. Pierwszy wykres w zasadzie jest drugim wykresem ale ze zmienionym liczeniem dokładności i wywaloną częścią danych, które ktoś uznał za mało szczegółowe (bo w zasadzie nie pasowały do wyliczeń by osiągnąć 95% dokładność w ujęciu statystyczno-metrologicznym modelu, nie myl tego z dokładnością danych bo to nie to samo).   Jak chcesz patrzeć w szerszej perspektywie to zainteresuj się czym było MWP (średniowieczny okres cieplny) i co było jego przyczyną. Trwał od około 1000 do 1300 roku. Napisałem, zestaw to sobie z danymi aktywności wulkanicznej (podpowiedź - była znacznie niższa niż wcześniej) oraz z promieniowaniem słonecznym, które było wyższe. Natomiast do małej epoki lodowcowej która zaczęła się około 1600 roku a skończyła około 1900 roku spowodował bardzo duży wzrost aktywności wulkanicznej w konsekwencji zmniejszone promieniowanie słoneczne. Co ciekawe nie zawsze duża aktywność wulkaniczna działa globalnie czego dowodzi wybuch Pektu-San (góra Paektu) w okolicy 946 roku którego erupcja była większa niż inne powodujące zmiany globalne, a jednak wpłynęła tylko lokalnie na Półwyspie Koreańskim.  Co na to wpłynęło? Mógł to być choćby korzystny w tej sytuacji układ prądów powietrza w okresie erupcji. To co piszesz ogólnie świadczy o tym, że nie ogarniasz jak to wszystko jest połączone i jak zmiana kilku elementów może wpłynąć na pozostałe. Stąd właśnie teksty typu:     Gdzie widać jak na dłoni, że nie ogarniasz dlaczego analizuje się tempo zmian głównie w okresie po 1900 roku.  Odpowiedz sobie sam na pytanie jaki przemysł miał człowiek w latach 800-1300 który mógłby globalnie wpłynąć na temperatury, żeby nie mówić o tym, że wtedy było to zjawisko naturalne. Zestaw to sobie teraz właśnie z tempem wzrostu temperatury i zmian w układzie klimatycznym na Ziemi w ostatnich 100 latach. Może znajdziesz odpowiedź, a nie wysiądziesz z racji tego że Cię to przerosło.  
    • Co to za gówniany monitor ten Aorus 😄 3 strony rozprawek o tym jak włączyć tryb, a co powinno być w instrukcji na wierzchu
    • Albo USA postawiło warunek w zamian za zabawki i pieniądze  
  • Aktywni użytkownicy

×
×
  • Dodaj nową pozycję...