brilliant (+70)
Forumas
Paieška nesutvarkytame masyve. Reikia paaiškinimo.
valdas3 (+1276)
Tau reikia suskaičiuoti kiek kartų pasikartoja šalies pavadinimas, patys miestai nesvarbu. Pavyzdžiui galėtum susikurti kokią struktūrą, kuria sudarytų šalies pavadinimas ir pasikartojimų skaičius. Susikurk tų struktūrų masyvą ir kiekvieną kartą nuskaitydamas failo eilutę patikrink ar tokia šalis jau yra masyve ar ne. Jei yra, tai jos pasikartojimų skaičių padidink vienetu, o jei nėra, tai įterpk naują šalį.
brilliant (+70)
valdas3Tau reikia suskaičiuoti kiek kartų pasikartoja šalies pavadinimas, patys miestai nesvarbu. Pavyzdžiui galėtum susikurti kokią struktūrą, kuria sudarytų šalies pavadinimas ir pasikartojimų skaičius. Susikurk tų struktūrų masyvą ir kiekvieną kartą nuskaitydamas failo eilutę patikrink ar tokia šalis jau yra masyve ar ne. Jei yra, tai jos pasikartojimų skaičių padidink vienetu, o jei nėra, tai įterpk naują šalį.
#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int n;
struct miestai
{
string miestas, valstybe;
int kiek;
}D[100];
void nuskaityk()
{
ifstream Df("U1.txt");
Df>>n;
Df.ignore();
char eil[21];
for(int i=1;i<=n; i++)
{
Df.get(eil, 20);
D[i].miestas=eil;
getline(Df,D[i].valstybe);
D[i].kiek=1;
}
Df.close();
}
void salink(int m)
{
for(int i=m; i<=n; i++)
{
D[i].valstybe=D[i+1].valstybe;
}
n--;
}
void skaiciuok()
{
for(int i=1; i<=n-1; i++)
{
for(int j=i+1; j<=n; j++)
{
if(D[i].valstybe==D[j].valstybe)
{
D[i].kiek++;
salink(j);
}
}
}
}
void spausdink()
{
for(int i=1; i<=n; i++)
{
cout<<D[i].valstybe<<" "<<D[i].kiek<<endl;
}
}
int main()
{
nuskaityk();
skaiciuok();
spausdink();
return 0;
}
Parašiau taip, taip sugalvojau. Įmanoma kažkaip gudriau, trumpiau?
pakeista prieš 11 m
valdas3 (+1276)
Taip, tikrai įmanoma. Galima visiškai apsieiti nuo šalinimo iš masyvo. Tiesiog nedėk į masyvą ko nereikia. O nereikia dėti šalių, kurios jau jame yra, tokiu atveju reikia tik padidinti jų skaitkliuką. Po nuskaitymo procedūros jau turėtum atsakymą.
P.S.
Kodėl pas tave operacijos su masyvais prasideda nuo pirmojo elemento, o ne nuo nulinio?
brilliant (+70)
valdas3Taip, tikrai įmanoma. Galima visiškai apsieiti nuo šalinimo iš masyvo. Tiesiog nedėk į masyvą ko nereikia. O nereikia dėti šalių, kurios jau jame yra, tokiu atveju reikia tik padidinti jų skaitkliuką. Po nuskaitymo procedūros jau turėtum atsakymą.
P.S.
Kodėl pas tave operacijos su masyvais prasideda nuo pirmojo elemento, o ne nuo nulinio?
Nezinau net, mokykloj taip moke tai ir taip rasom.
valdas3 (+1276)
Kažkodėl nemanau, kad mokytojai galėtų tokią klaidą daryti, nes tai yra pradmenų pradmenys. Nebent prieš tai programavote su paskaliu, o tada perėjote prie C++, tai gal tada ir galėjo kas nors susipainioti... Na bet kaip bebūtų, jei turi masyvą A, kuriame yra, pavyzdžiui, 100 elementų, tai masyvo pradžia bus elementas A[0], o paskutinis elementas bus A[99].
Nori sudalyvauti šioje temoje ir parašyti savo pranešimą? Prisijungti »