Still giving me a repeating vector - c++

I am a new C++ programmer, I would like to ask you a simple question but I do not understand why output still give me repeating data:
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <fstream> // std::ifstream
#include <string.h>
#include <iostream>
#include <complex>
#include <sstream>
#include <vector>
#include <cmath>
#include <iomanip>
using namespace std;
int main(){
int nfft;
nfft = 256;
vector<float>f;
for(unsigned i=0; i<nfft; i++){
f.push_back(((i/(nfft-1))-0.5)*8e6);
}
for(unsigned i=0;i<nfft;i++){
cout << f[i] << endl;
}
}
My expectation is a vector: [-4.0000 -3.9686 -3.9373 -3.9059 -3.8745 -3.8431 -3.8118 -3.7804 -3.7490 -3.7176 -3.6863 -3.6549 ....... 3.9059 3.9373 3.9686 4.0000]
Please give me a hand to solve this problem.
Thank you so much.

(i/(nfft-1)) is well protected with parentheses and thus performs an integer division.
Since nfft > i you get zero => always the same value.
Example of how to ix:
f.push_back(((float(i)/(nfft-1))-0.5)*8e6)

Related

Error while performing string copy operation in C++

Please explain why is this giving an error but the other on is running fine
The following code gives the error:
#include <iostream>
#include <string>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include <string.h>
using namespace std;
int main()
{
string s1,s2;
int i;
cout << "Enter the string to copy into another string : ";
getline(cin,s1);
for(i=0; s1[i]!='\0'; ++i)
{
s2[i]=s1[i];
}
s2[i]='\0';
cout<<"\n\nCopied String S2 is : "<<s2;
return 0;
}
Error looks like this
But this works perfectly fine
#include <iostream>
#include <string>
#include <conio.h>
#include <math.h>
#include <iomanip>
#include <string.h>
using namespace std;
int main()
{
char s1[100], s2[100], i;
cout << "Enter the string to copy into another string : ";
cin>>s1;
for(i=0; s1[i]!='\0'; ++i)
{
s2[i]=s1[i];
}
s2[i]='\0';
cout<<"\n\nCopied String S2 is : "<<s2;
return 0;
}
In your case, s2 is initialized to an empty string with a length of 0, so you can't write past the bounds. If you want to, you must first resize it:
s2.resize(s1.length());
for(i=0; s1[i]!='\0'; ++i)
{
s2[i]=s1[i];
}
Also, c++ std::string does not need a terminating nullbyte, unlike C strings.

Random Numbers aren't reaching limit

I am creating a random number generator for numbers between 110,000 and 320,000. When I run it, no numbers are above 150,000. Is there some way to make sure that numbers above 150,000 are generated? Even generating thousands of numbers do not work. I am aware I have lots of things included. Here is the code:
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <sstream>
#include <conio.h>
#include <ctime>
#include <random>
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int main() {
srand((unsigned) time(0));
int randomNumber;
for (int index = 0; index < 500; index++) {
randomNumber = (rand() % 320000) + 110000;
cout << randomNumber << endl;
}
}
As noted by John. You could use more recent random number generators easier to manipulate.
Adapting the code from C++ Reference about uniform_int_distribution
for your use case is straightforward:
#include <iostream>
#include <random>
int main(void) {
std::random_device rd; // Will be used to obtain a seed for the random number engine
std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd()
std::uniform_int_distribution<> distrib(110000, 320000);
for (int n=0; n<10; ++n)
// Use `distrib` to transform the random unsigned int generated by
// gen into an int in [110000, 320000]
std::cout << distrib(gen) << ' ';
std::cout << '\n';
}

Center a 17x11 paper using Horizontal

#include "Calculator.h"
#include <iostream>
#include <string>
#include <cmath>
#include "DoWhileLoops.h"
#include "Average.h"
#include "SwitchStatement.h"
#include "LogicalOperators.h"
#include <cstdlib>
#include "RandomNumberGenerator.h"
#include <stdlib.h>
#include <ctime>
#include "DefaultArguments.h"
#include "FindingCenter.h"
using namespace std;
int length;
int width;
int Horizontal(int length, int width);
FindingCenter::FindingCenter()
{
cout << Horizontal();
cout << "What is the length?" << endl;
cin >> length;
cout << "What is the width?" << endl;
cin >> width;
}
int Horizontal(int length, int width)
{
return ((17-(length + width))/ 3);
}
I keep getting this error:
"too few arguments to function 'int Horizontal(int, int)"
the code is for my own personal use im trying to center a 17x11 paper.
its an orthographic projection paper for my mechanical drawing class... also any other pointers will help thx :)
The error is pretty clear: you are calling Horizontal with less than the required 2 arguments: in fact, you are calling it with no arguments.
Shouldn't you be calling it after you've read in length and width, so you can pass them to it?

Dice roll not working C++ deafult_random_engine

For some reason I keep getting 6 every time. I know of another way to do a random dice roll, but I wanted to learn how to use the deafult_random_engine.
#include <iostream>
#include <string>
#include <random>
#include <ctime>
using namespace std;
int main()
{
default_random_engine randomGenerator(time(0));
uniform_int_distribution<int> diceRoll(1, 6);
cout << "You rolled a " << diceRoll(randomGenerator) << endl;
}
But this bit of code works with the time(0).
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
// dice roll
{
srand(time(0));
for(int x = 1; x < 2; x++){
cout << 1+(rand()%6) << endl;
}
return 0;
}
It's almost certainly the use of time(0) as the culprit here.
You should probably opt for a method like this:
#include <iostream>
#include <string>
#include <chrono>
#include <random>
#include <ctime>
using namespace std;
int main() {
default_random_engine randomGenerator(std::random_device{}());
// OR:
// default_random_engine randomGenerator(
// (unsigned) chrono::system_clock::now().time_since_epoch().count());
uniform_int_distribution<int> diceRoll(1, 6);
cout << "You rolled a " << diceRoll(randomGenerator) << endl;
return 0;
}
While your original code always produced 6 on my system, this one seems a little more "adventurous":
pax> for i in {1..10}; do ./qq ; sleep 1 ; done
You rolled a 5
You rolled a 5
You rolled a 6
You rolled a 1
You rolled a 6
You rolled a 5
You rolled a 2
You rolled a 3
You rolled a 5
You rolled a 4
#include <iostream>
#include <string>
#include <random>
#include <ctime>
using namespace std;
int main()
{
mt19937 randomGenerator(time(0));
uniform_int_distribution<int> diceRoll(1, 6);
cout << "You rolled a " << diceRoll(randomGenerator) << endl;
}

C++ Not displaying Random number correctly

I want to generate a random number for the temperature. The code I used is below:
int Temp()
{
// genreate random temperture
// initialize random seed:
srand ( time (NULL) );
// generate number between 1 and 100:
int t = rand() % 100 + 1;
std::cout << t << std::endl;
return t;
}
When the program is run, instead of displaying a number between 1 and 100, it display the following:
010C1109
Could someone explain where or why it is going wrong?
Edit: If anyone wondering I used the following:
#include <iostream>
#include <string>
#include <fstream>
#include <istream>
#include <ctime>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <map>
#include <cstdlib>
#include <cstring>
#pragma once
How to choose the way your numbers are displayed:
std::cout << std::hex << t << std::endl; //displays in hexadecimal
std::cout << std::dec << t << std::endl; //displays in decimal
In my example I see
58 in hexadecimal and 88 in decimal (5*16+8).
Here are official links for making the post complete.
C++ forum:
http://www.cplusplus.com/forum/windows/51591/
Details explained:
http://www.cplusplus.com/reference/ios/dec/