Permalänk
Medlem

c++ Array men rand tal

Tjena tjena!

sitter här och programmerar inför onsdagen då jag ska ha prov på c++ men jag har kört fast på 2 uppgifter, eller rättare sagt en uppgift och en utvecklings uppgift.

första uppgiften:
skriv ett program som fyller 1000 slumptal mellan 1 och 50 och som sedan läser in ett tal och kollar om talet finns med i fältet.
Använd följande utskrift:

Ange ett tal mellan 1 och 50: (tex) 34
Talet finns / finns ej med i fältet.

jag har kommit så här långt sen körde det fast sig

#include <iostream> using namespace std; void main ( void) { int anArray[1000]; int tal; cout<<"Ange tal mellan 1 och 50:"; cin>> tal; for( int x=0; x<1000; x++) { anArray[x]= (rand()%50+1); } for( int y=0; y<1000;y++) { cout << anArray[y]<< " "; } if (tal== (rand()%50+1) { cout<<" talet finns!" << endl; } else { cout<<" talet finns EJ!" << endl; } }

sedan var det den där utvecklings uppgiften:

Modifiera detta program så att programmet räknar hur många det finns av det inlästa talet i fältet, med följande utskrift.
Ange tal mellan 1 och 50 : (tex) 34
det finns 2 st tal 34 i fältet.

Tackar så hemskt mycket om ni kunde hjälpa mig med dessa uppgifter skulle hjälpa mig stort

// LiPo

la till lite
Permalänk
Medlem

Skapa en ny for loop som kollar det värde du matar in och för varje gång den hittar det talet så adderar, ++, en int. Sen när du har kollat hela arrayen så printar du ut din int variabel som har räknat hur många gånger den har hittat talet du sökte efter.

#include <iostream>
using namespace std;
void main ( void)

{
int anArray[1000];
int sok;
int counter;

cout<<"Vilket tal soker du efter?";
cin>>sok;

for( int x=0; x<1000; x++)
{
anArray[x]= (rand()%50+1);
}

for( int y=0; y<1000;y++)
{
if(sok==anArray[y])
{
counter++;
}

}

cout<<"Talet: " + sok + " fanns med " + counter + "ganger".;

}

Dold text

Inte helt hundra på att allt fungerar perfekt, men grund idén är det viktiga. Har inte programmerat c++ på 2 år Men prova.

Permalänk
Medlem

Tusen tack!!! Några små missar var det men dom rättade jag till, vem är inte perfekt i denna värld

Ännu en gång tusen tack!!

Permalänk
Medlem

hoppas ingen tar det illa om jag dubbel postar men jag körde fast på en sak i de översta programmet där man skulle få ut att i dessa 1000 tal finns det eller finns det inte det talet användaren skriver.

jag kom så här långt men texten " talet finns " och "talet finns ej" skrivs ut 1000 ggr. hur rättar jag till de?

#include <iostream> using namespace std; void main ( void) { int anArray[1000]; int tal; int tal2; cout<<"Ange tal mellan 1 och 50:"; cin>> tal; for( int x=0; x<1000; x++) { anArray[x]= (rand()%50+1); } for( int y=0; y<1000;y++) { if (tal==anArray[y]) { cout <<" talet finns"<<endl; } else if ( tal != anArray[y]) { cout <<"talet finns ej" << endl; } } }

Permalänk
Medlem

bool finnsMed = false; for( int y=0; y<1000;y++) { if (tal==anArray[y]) { finnsMed = true; break; } } if(finnsMed) cout << "Talet finns med" << endl; else cout << "Talet finns inte med" << endl;

Detta bör fungera.
Det du gjorde i din kod är att skriva ut ifall det fanns med eller inte innuti loopen istället för utanför. Dvs ifall talet du söker inte är lika med array[y] så skriver den att det inte finns med, sen testar det mot nästa tal i arrayen och ifall det inte finns med så skriver den ut det igen.

Vill även poängtera att det är viktigt med meningsfullaktiga namn på variabler och metoder. Även i ett så litet program som detta då det tillslut blir en vana att man döper alla int till t.ex tal, tal1 osv.

Permalänk
Medlem

tack tack! När du väl säger det så förstår jag! Detta forumet rockar ju! tack för all hjälp!

Permalänk
Medlem

Jag är lite skadad av för många år av FPS-jagande, men jag hade vänt på det hela. Gör en array som är 50 stor istället och låt varje entry i den representera hur många gånger du slumpade fram det talet. Då slipper du loopa över en 1000 stor array för att se om talet slumpades fram. Du kan göra samma sak för att se hur många gånger det blev också. Som en bonus kommer programmet använda mindre minne (stack).

Permalänk
Medlem

Eftersom du redan vet talet du kommer söka efter när du skapar arrayen kan du fixa det med en for-loop.

#include <iostream> #include <time.h> using namespace std; int main() { srand (time(NULL)); int anArray[1000]; int tal; int counter = 0; cout << "Ange tal mellan 1 och 50: "; cin>> tal; for( int x=0; x<1000; ++x) { int num = rand() % 50 + 1; anArray[x]= num; if (num == tal) ++counter; } if (counter != 0) cout << "Det finns " << counter << " tal " << tal << " i fältet." << endl; else cout << "Talet fanns inte i fältet." << endl; return 0; }

Permalänk
Medlem
Skrivet av grovlimpa:

Jag är lite skadad av för många år av FPS-jagande, men jag hade vänt på det hela. Gör en array som är 50 stor istället och låt varje entry i den representera hur många gånger du slumpade fram det talet. Då slipper du loopa över en 1000 stor array för att se om talet slumpades fram. Du kan göra samma sak för att se hur många gånger det blev också. Som en bonus kommer programmet använda mindre minne (stack).

+1 på det. När det finns restriktioner på datan (här vet man t.ex. att det rör sig om heltal mellan 1 och 50) så lönar det sig ofta att "vända" på det, som grovlimpa sa.

Då det verkar handla om tentaplugg och inte någon inlämningsuppgift du kommer betygsättas på kan du få ett exempel på kod där grovlimpas förslag på angreppsvinkel använts.

// Initialize the array with all zeros. int randomNumbers[50] = {}; // Fill the array not with the random numbers but with how many times each random number (0-49) appears. // If eg the number 5 is generated 8 times, randomNumbers[5] will contain an 8. for(int i = 0; i < 1000; i++){ randomNumbers[rand() % 50]++; } // Ask the user for a number. int numberToCheckFor; cout << "Enter a number (1-50): "; cin >> numberToCheckFor; // Check if the user provided number exists. if(randomNumbers[numberToCheckFor - 1] > 0) // - 1 as there's an offset (0-49 is the internal representation of 1-50). cout << numberToCheckFor << " exists!"; else cout << numberToCheckFor << " does not exist!"; // Check how many times the user provided number appears. cout << numberToCheckFor << " exists " << randomNumbers[numberToCheckFor - 1] << " times!";

Visa signatur

Laptop: Dell Latitude E7270 | 12,5" FHD IPS | i5-6300U | 16GB RAM | 500GB SSD
Laptop: MacBook Air 13"
NUC: Intel i5-4250U | 8GB RAM | 250GB SSD