Dodaj do ulubionych

Zamiana małych liter na duże i odwrotnie

17.10.05, 10:52
I znów potrzebuję pomocy. Nie wiem jak napisać programik który by zamieniał
małe litery na duże i odwrotnie. Mam kawałek takiego programu ale niestety nie
działa. Podpowiedzcie co żle zrobiłam. Tekst musi być wpisywany do tablicy.

#include <iostream>

using namespace std;

int main (int argc, char *argv[])
{
char s[10];
int i;
char znak;
int roznica='a'-'A';
cout << "Wpisz tekst (maksymalnie 9 znakow): " << endl;
cin.getline(s, 10);
cout << "Wpisales: " << s << endl;
for(i=0;i<10;i++)
{
if('A' <= znak <= 'Z')
s[10]=(znak-roznica);
else
s[10]=(znak+roznica);
}
cout<<"Po zmianie: "<<s[10]<<"\n";
system("PAUSE");

}

Proszę o wyrozumiałość w poprawności tego programu ale są to moje początki z c++.
Edytor zaawansowany
  • alsor 17.10.05, 14:48

    char s[16]; // lekki zapas

    // czytasz

    for(int i = 0; i < 10; i++)
    {
    char c = s[i];
    if( c >= 'A' && c <= 'Z' ) c += 'a' - 'A';
    else if( c >= 'a' && c <= 'z' ) c += 'A' - 'a';
    s[i] = c;
    }

    s[10] = 0; //
    cout << s;
  • anna852 17.10.05, 21:31
    Wielkie dzięki. Już wiem gdzie robiłam błąd.
    A teraz mam do rozwiązania taki mały problem:

    #include <iostream>

    // W tym programie sa dwa (dosc czesto popelniane) bledy.
    // Jeden z nich powoduje zwykle niekontrolowane zachowanie sie uruchumionego
    programu.
    // Okreslic co jest powodem pierwszego, a co drugiego bledu.

    using namespace std;

    int main (int argc, char *argv[])
    {
    float a = 4.5;
    float *x, y;

    *x = 10.0;
    y = &a;
    cout << "Wcisnij ENTER" << endl;
    cin.get();
    }

    Nie mogę się połapać o co chodzi w tych wskaźnikach. Pomóżcie, proszę...
  • alsor 18.10.05, 02:50
    float a = 4.5;
    float *x, y, z;

    x jest wskaźnikiem, który w tej chwili wskazuje na przypadkowy obszar pam.
    (może to być obszar zabroniony - innego programu/systemu ...)
    Należy go ustalić np.: x = &z; (x wskazuje na 'z', czyli wartość *x = z)

    *x = 10.0; // katastrofa - zapis do przypadkowego obszaru pamięci

    y = &a; // niezgodność typów, kompilator nie łyknie tego;
    // można napisać: x = &a, albo y = a

    ----------
    Wskaźniki są często używane jako tablice tworzone 'dynamicznie':
    double *t;

    t = (double*)alloc(sizeof(*t)*1000); // tworzę 1000-elementową tablicę
    // sizeof(*t) = sizeof(double) = 8, zatem łącznie mamy blok 8000 bajtów
    // dostęp do tych elementów: t[i] lub *(t+i), i = <0..999>
    // teraz można wykonać:
    t[0] = 1.9;
    t[1] = 2.2;
    t[3] = t[1] + 7;
    // itd., można coś obliczać na tysiącu zmiennych...

    free(t); // zwolnienie pamięci, gdy już jej nie potrzebujemy.

    // a teraz:
    t[8] = 99.0; // kosmiczny błąd! t wskazuje na coś, czego już nie ma.
  • anna852 18.10.05, 14:15
    Ok. Czyli pierwszym błędem było przypisanie y=&a. Poprawiłam to i moim zdaniem
    program działa ok. ale ma tu być też jakiś drugi błąd. Gdzie???
  • alsor 18.10.05, 14:36
    *x = 10.0
  • anna852 18.10.05, 15:50
    No tak. Przepraszam, nie zauważyłam. Dzięki za pomoc.
  • anna852 18.10.05, 16:03
    Jeżeli mogę prosić jeszcze o pomoc to bardzo proszę o przeanalizowanie
    poniższego programu:
    #include <iostream>
    #include <stdlib.h>

    using namespace std;

    int main(int argc, char *argv[])
    {
    int i, rozmiar;
    int *tabl1 = new int [rozmiar];
    int *tabl2 = new int [rozmiar];
    cout<<"Podaj rozmiar tablicy: ";
    cin>>rozmiar;

    for (i=0;i<rozmiar;i++)
    {
    cout<<"Podaj element nr "<<i<<" : ";
    cin>>tabl1[i];

    }
    for (i=0; i<rozmiar;i++)
    {
    tabl2[rozmiar-1-i]=tabl1[i];
    }
    cout<<"\n Elementy 1 tablicy:";
    for(i=0;i<rozmiar;i++)
    {
    cout<<"\n Element nr: "<<i<<" ma wartosc "<<tabl1[i]<<"\n";

    }
    cout<<"\n Elementy 2 tablicy:";
    for(i=0;i<rozmiar;i++)
    {
    cout<<"\n Element nr: "<<i<<" ma wartosc "<<tabl2[i]<<"\n";

    }
    delete [] tabl1;
    delete [] tabl2;
    system("PAUSE");
    return 0;
    }


    Program ten ma za zadanie wczytac od uzytkownika (w petli) wszystkie wartosci do
    tablicy tabl1, a nastepnie - w innej petli - przepisac je W ODWROTNEJ KOLEJNOSCI
    do tablicy tabl2. Na koniec nalezy wyswietlic zawartosc obu tablic.
    Dodatkowo na początku ma pytać użytkownika o rozmiar tablicy i deklarować tabl1
    i tabl2 zgodnie z tym rozmiarem.
    Program ogólnie działa i się kompiluje tyle że nie jestem pewna co do zapisu:
    tabl2[rozmiar-1-i]=tabl1[i];
    czy jest on poprawny?? I czy program jest ogólnie napisany w miarę dobrze.
    Proszę o odpowiedź.
  • alsor 19.10.05, 07:11
    //Przed utworzeniem tablic musisz już mieć 'rozmiar'

    int i, rozmiar;

    cout<<"Podaj rozmiar tablicy: ";
    cin>>rozmiar;

    if( rozmiar <= 0 ) return; // zły rozmiar... kończymy

    int *tabl1 = new int [rozmiar];
    int *tabl2 = new int [rozmiar];

    -----------
    tabl2[rozmiar-1-i] = tabl1[i]; // kopiowanie w odwrotnej kolejn. - jest dobrze
  • kamienienaszaniec1 16.01.14, 13:11
    hej, ja zamieniam male litery na duze online tutaj : skryptyonline.pl/zamiana_wielkosci_liter nie trzeba nic instalować.

Popularne wątki

Nie pamiętasz hasła

lub ?

 

Nie masz jeszcze konta? Zarejestruj się

Nakarm Pajacyka