Если вам действительно нужна идея, а не код готовой программы, вот вам моя мысль:
int rows = 0, cols = 0;
cout << "Enter size (Example: 200x200)\n";
cin >> rows >> cols;
if(rows <= 0 || cols <= 0) throw runtime_error("Bad size");
int pixmap[rows][cols];
for(int i = 0; i < rows; ++i){
double position = double(i) / rows; //Вычисляем "высоту"
int color = position * 255; //и находим подходящий цвет
cout << position << " " << color << '\n';
for(int j = 0; j < cols; ++j)
pixmap[i][j] = color;
}
FINAL VERSION:
#include <iostream>
#include <cstdio>
using namespace std;
void main()
{
int rows = 0, cols = 0;
char* filename = "test.pgm";
cout << "Enter size and filename (Example: 200x200 mygradient.pgm)\n";
cin >> rows >> cols >> filename;
if(rows <= 0 || cols <= 0) throw runtime_error("Bad size");
FILE* pfile = fopen(filename, "w");
fprintf(pfile, "P2\n%d %d\n255\n", cols, rows);
for(int i = 0; i < rows; ++i){
double position = double(i) / rows;
int color = position * 255;
cout << position << " " << color << "\n";
for(int j = 0; j < cols; ++j)
fprintf(pfile, "%d ", color);
fprintf(pfile, "\n");
}
}
Вводить например вот так: 1500x400 file.pgm