GRY-Online.pl --> Archiwum Forum

Programowanie w C# ---> proste zadanie

07.12.2006
16:44
[1]

Karl_o [ APOCALYPSE ]

Programowanie w C# ---> proste zadanie

Chcialbym napisac program, ktory liczy ile razy dany znak pojawil sie w podanej przez uzytkownika tablicy string. Tylko nie wiem jak sprawdzic rozmiar owej tablicy, zeby wyjsc z petli while. Z gory dzieki za odpowiedz. Pozdrawiam

07.12.2006
17:31
[2]

Karl_o [ APOCALYPSE ]

^up

07.12.2006
17:40
[3]

Regis [ ]

A w C# nie ma czasem metody sizeof() lub czegos podobnbego?

07.12.2006
18:02
[4]

Moshimo [ FullMetal ]

Hm w sumie glowy nie dam, ale mysle ze to tak by moglo byc:
#include <iostream.h>
#include <conio.h>
main()

char tab[3]="ab";
int i=0;
cout << sizeof(tab)/sizeof(char)-1 << endl; //sposob 1
while (tab[ i ]!='\0')i++; //sposob 2
cout << i << endl;
getch();


Tylko troche sam sie dziwie, ze nie przyjelo mi deklaracji tablicy tab[2], lecz dopiero tab[3].. To ma zwiazek ze znakiem konca tablicy? (myslalem ze on sie jakos automatycznie dodaje, tzn nie musimy go uwzgledniac przy podawaniu rozmiarow tablicy)
edit. aha i w tym przypadku sprawdzasz w zasadzie nie rozmiar tablicy, lecz jej dlugosc, ale przypuszczam ze o to Ci chodzilo. Do samego rozmiaru sluzy po prostu funkcja zapodana przez Regisa.

07.12.2006
18:09
[5]

fanlegii79 [ Generał ]

w c# to bedzie pewnie cos ala tablica.length().
Ale mozna to zrobic foreach-em

foreach (int i in intArray)
Console.WriteLine(i.ToString() );

07.12.2006
18:10
[6]

Karl_o [ APOCALYPSE ]

moshimo dokladnie oto mi chodzilo, dzieki :)

07.12.2006
18:16
[7]

Moshimo [ FullMetal ]

Aha spoko.. to dobrze ze Ci to zadzialalo, bo to pod c++ bylo :)

07.12.2006
18:24
[8]

Karl_o [ APOCALYPSE ]

Kurcze znowu cos jest nie tak. Napisalem program ktory ma zliczac dany znak w tablicy, ale za cholere nie wiem czemu nie dziala, tzn za kazdym razem wychodzi 0 :(


#include <iostream>
#include <string>;

using namespace std;

string tab("zainicjalizowana tablica znakowa");

int licz()‹
char a;
int licznik=0;
int i=0;

cout<<"Podaj znak, ktory chcesz znalesc: ";
cin>>a;
while (tab[ i ]!='/0')‹
if (a==tab[ i ]) licznik=licznik+1;
i++;
return licznik;


int main()

int wynik=licz();
cout<<"Podany znak znaleziono: "<<wynik<<" razy";

system("PAUSE");

07.12.2006
18:41
[9]

Karl_o [ APOCALYPSE ]

^up

moze jednak ktos wie co jest nie tak?

07.12.2006
18:42
[10]

Moshimo [ FullMetal ]

Jak na moje oko to blad jest tutaj:
while (tab[ i ]!='/0')
if (a==tab[ i ]) licznik=licznik+1;
i++;
return licznik;

Powinno byc:
while (tab[ i ]!='/0')
if (a==tab[ i ]) licznik=licznik+1;
i++;

return licznik;
Sprawdz i daj znac ;)
edit. slabo widac pogrubienie. Chodzi o ustawienie nawiasow ‹ ›

07.12.2006
18:51
[11]

Karl_o [ APOCALYPSE ]

Teraz to juz wogole kompilator wywala mi blad przy linijce z petla while (WARNING comparison is alway true due to limited range of data type). Ehhh pochlastac sie idzie :/

P.S.
Nie przepraszam, juz skompilowany program wywala mi blad po podaniu znaku. Chodzi mniej wiecej w tym komunikacie, ze odwoluje sie do obszaru pamieci, ktory nie moze byc czytany

07.12.2006
18:58
[12]

Karl_o [ APOCALYPSE ]

Sorry za 2 posta ale nie moge juz edytowac poprzedniego.

Juz wiem gdzie tkwil blad....ehhh powinno byc '\0' a nie '/0' :) Ale tak wielkie dzieki za pomoc moshimo

07.12.2006
19:00
smile
[13]

Moshimo [ FullMetal ]

Hehe pierwszy jestes, wlasnie tez do tego doszedlem :D. Zawsze jakies glupie bledy ;)

07.12.2006
19:12
[14]

DarkStar [ magister inzynier ]

#include <iostream>
#include <conio.h>
#include <string>
using namespace std;

int main()

string sString;
char cZnak;

cout << "Podaj string: ";
cin >> sString;
cout << "Podaj szukany znak: ";
cin >> cZnak;

int i = 0;
int iLicznik = 0;
while(sString[ i ])

if(sString[ i ] == cZnak) iLicznik++;
i++;

cout << "Szukany znak wystapil " << iLicznik << " razy" << endl;
cout << "String ma dlugosc " << i;

getch();


powinno dzialac:)

07.12.2006
19:22
[15]

Karl_o [ APOCALYPSE ]

jeszcze jak ktos moglby obejrzec to drugie zadanie.
Trzeba przepisac wartosci 3 tablic typu char do 4 tablicy. Niewiedziec czemu mi przepisuje tylko pierwsza a z reszeta nic sie nie dzieje:

#include <iostream>

using namespace std;

int main()

char tab1[]="zainicjalizowana";
char tab2[]="tablica";
char tab3[]="znakowa";
int a,b,c,d,e,f;
int j=0;

a=(sizeof(tab1)/sizeof(char))+(sizeof(tab2)/sizeof(char))+(sizeof(tab3)/sizeof(char));
char scalone[a];

b=sizeof(tab1)/sizeof(char);
c=sizeof(tab2)/sizeof(char);
d=sizeof(tab3)/sizeof(char);

for(int i=0;i<=b;i++) ‹
scalone[j]=tab1[ i ];
j++;


for(int i=0;i<=c;i++)‹
scalone[j]=tab2[ i ];
++j;


for(int i=0;i<=d;i++)‹
scalone[j]=tab3[ i ];
++j;


cout<<scalone;

system("PAUSE");

07.12.2006
19:52
[16]

Moshimo [ FullMetal ]

Zmien warunki w forach z i<=b na i<b-1 (odpowiednio do reszty, chociaz w ostatnim nie trzeba :)).

07.12.2006
20:25
[17]

Karl_o [ APOCALYPSE ]

Mam jeszcze jedno pytanie, mianowicie jezeli jakas funcja zwraca mi na przyklad sume 2 tablic w postaci nowej tablicy , to jak pozniej ja wypisyac juz w funkcji main()?

07.12.2006
20:51
[18]

Karl_o [ APOCALYPSE ]

^up

07.12.2006
20:55
[19]

Moshimo [ FullMetal ]

Znaczy jak sume? Takie scalenie tak jak teraz zrobiles? No to przeciez wyswietla scalona tablice zwyczajnie cout'em?

07.12.2006
20:58
[20]

Karl_o [ APOCALYPSE ]

Ale ze mnie glupek....chyba przez to, ze juz zmeczony jestem....juz wszystko dziala, wiem gdzie tkwil blad

P.S.
Moshimo moglbys mi pomoc rozwiazac jakos to zadanie?
Napisz program, który pobierze od użytkownika dane kilku osób (Imię, Nazwisko) i zapisze w tablicy (typu string) o pewnym rozmiarze zdefiniowanym jako stała. Po podaniu danych każdej osoby wypisz pełną listę osób i pytaj, czy wprowadzać dane następnej.
Wprowadzanie danych nowej osoby i wypisywanie listy osób zrealizuj w oddzielnej funkcji. Do numeracji kolejnej osoby wykorzystaj w funkcji zmienną statyczną.

07.12.2006
21:02
[21]

Moshimo [ FullMetal ]

edit. heh juz niewazne ;)

07.12.2006
21:09
[22]

Moshimo [ FullMetal ]

wybacz Karl_o juz sam musze sie wziac za swoj referat, jestem do tylu niezle :/

© 2000-2021 GRY-OnLine S.A.