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ę.

×
×
  • Dodaj nową pozycję...