Tilt Posted April 17, 2013 Report Posted April 17, 2013 Scrie?i un program C/C++ care citeste de la tastatur? un num?r natural n (2?n?20) si apoi ncuvinte distincte, fiecare fiind format din cel mult 20 de caractere, numai litere mici alealfabetului englez. La introducerea datelor, dup? fiecare cuvânt se tasteaz? Enter. Programulafiseaz? pe ecran num?rul de cuvinte dintre ultimele n-1 citite, care încep cu primul cuvântcitit.Exemplu: dac? n=5 si cuvintele citite sunt:bunbuncarbuniciabundentbunavoiepe ecran se afiseaz? 3 (deoarece numai cuvintele buncar, bunici si bunavoie încep cubun).se poate rezolva in 2 moduri una cu functii si una fara ? daca da cum ? eu unul m-am blocat Quote
nedo Posted April 17, 2013 Report Posted April 17, 2013 Pai relativ simplu.Intr-un int salvezi numarul de cuvinte ce trebuie introduse(n-ul)Creezi un vector de string-uri(pentru a intera mai usor prin ele).faci o functie care preia ca si parametri , prin referinta, 2 vectori de stringuri, primul vector este vectorul cu cele n cuvinte iar al 2-lea este un vector gol.Faci un loop de la al 2-lea la ultimul cuvant si vezi daca cautarea primului cuvant in celelalte cuvinte returneaza = 0(adica prima pozitie). Daca returneaza prima pozitie atunci incrementezi un contor si adaugi cuvantul respectiv in cel de-al 2-lea vector.La sfarsit returnezi numarul de cuvinte gasite.Printezi pe ecran rezultatul functiei si poti printa si cele 3 cuvinte. Quote
totti93 Posted April 17, 2013 Report Posted April 17, 2013 Uite programul in C (fara vectori):#include <stdio.h>#include <string.h>void main() { int n, cnt = 0; char root[20], cuvant[20]; printf("n="); scanf("%d", &n); // Citim primul cuvant (cuvant radacina) si decrementam n scanf("%s", root); n--; // Repetam pana cand n != 0, citim cuvintele si numaram cele care incepu cu root while (n) { scanf("%s", cuvant); // Daca adresa de memorie unde se afla substringul gasit e egal cu adresa de inceput a stringului mare if (strstr(cuvant, root) == cuvant) cnt++; n--; } printf("%d", cnt);} Quote
1000DotS Posted April 17, 2013 Report Posted April 17, 2013 Uite programul in C (fara vectori):#include <stdio.h>#include <string.h>void main() { int n, cnt = 0; char root[20], cuvant[20]; cout<<"n= "; cin>>n; // Citim primul cuvant (cuvant radacina) si decrementam n cin>>root; n--; // Repetam pana cand n != 0, citim cuvintele si numaram cele care incepu cu root while (n) { cin>>cuvant; // Daca adresa de memorie unde se afla substringul gasit e egal cu adresa de inceput a stringului mare if (strstr(cuvant, root) == cuvant) cnt++; n--; } cout<<cnt;}Codul in C++...Cine stie, poate nu stie C...zic si eu Quote
sharkyz Posted April 17, 2013 Report Posted April 17, 2013 ??? Este acelasi concept, daca stie c++ poati citi codul de mai sus! lol.. Quote
yoyois Posted April 17, 2013 Report Posted April 17, 2013 Cred ca poti fi mai drastic cu eliminarea(cum a facut @totti)Poti chiar sa elimini cuvantul ca solutie daca una din literele din radacina nu coincid. (pt viteza ridicata).Probabil rezolvarea scolara are ca principiu memorarea tuturor cuvintelor (intr-o martice). Quote