Консультация № 159769
06.02.2009, 15:40
0.00 руб.
0 10 1
Дана целочисленная прямоугольная матрица, найти номера первых столбцов, не содержащих ниодного отридцательного элемента, чтобы проверялся эхо контроль.. вводились только цифры и в коде несколько мэйнов.. видел подобное, не содержащее нули.. преподавателю не понравилось, еще чтобы программа не закрывалась до тех пор пока не надоест выводить результаты.. Прошу помощи, помогите разобраться.. и еще мы пишем консольные приложения, у меня почему-то после добавления строки
locale::global(locale("rus_rus.866")); - все равно с кодировкой беда.. Заранее благодарен

Обсуждение

Неизвестный
06.02.2009, 15:52
общий



#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
const int Nmax=15;
char ch;
unsigned int n,ind=0;
float A[Nmax];
printf("Please enter quantity of elements in a file no more than 15 :");
scanf("%d",&n);
for (unsigned int i=0;i<n;i++)
{ printf("Enter an element[%d]",i);
scanf("%f",&A[i]);
}
for (unsigned int i=0;i<n;i++)
if (A[ind]<A[i]) ind=i;
for (unsigned int i=0;i<n;i++)
printf("element[%d]=%f\n",i,A[i]);
printf("Press any button to continue \n");
ch=getch();
for (unsigned int i=0;i<n;i++)if (A[ind]<A[i]) ind=i;
printf("The Maximum value of a file A [%d] =%f",ind,A[ind]);
getchar();
getchar();}
Неизвестный
06.02.2009, 16:00
общий
Для того, чтоб данные выводились с плавающей точкой необходимо тип преобразования %f заменить на %e:
Код:

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <math.h>

int main(void)
{
const int Nmax=15;
char ch;
unsigned int n,ind=0;
float A[Nmax];
printf("Please enter quantity of elements in a file no more than 15 :");
scanf("%d",&n);
for (unsigned int i=0;i<n;i++)
{ printf("Enter an element[%d]",i);
scanf("%f",&A[i]);
}
for (unsigned int i=0;i<n;i++)
if (A[ind]<A[i]) ind=i;
for (unsigned int i=0;i<n;i++)
printf("element[%d]=%e\n",i,A[i]);
printf("Press any button to continue \n");
ch=getch();
for (unsigned int i=0;i<n;i++)if (A[ind]<A[i]) ind=i;
printf("The Maximum value of a file A [%d] =%e",ind,A[ind]);
getchar();
getchar();
}
Неизвестный
06.02.2009, 16:06
общий
Что касается Вашего условия.
Трудно понять условие содержащее сплошные ...(типа"чтобы проверялся эхо контроль.. вводились только цифры и в коде несколько мэйнов.. видел подобное, не содержащее нули.. ")
-что значит несколько мейнов??? Да и вообще условие надо бы понятнее расписать. Эксперты ведь не телепаты.

Для того, чтоб выводить после locale::global(locale("rus_rus.866")) символы в русской кодировке необходимо пользоваться wide-символами. Это 2х байтовые символы. Тип wchar_t.
Например:
Код:

wcout<<L"Привет, Степанов Андрей Сергеевич!";

И вообще. Вы пишете, вроде как, с использованием синтаксиса C++, но при этом не пользуетесь его возможностями(типа на C программируете). Так каким компилятором пользуетесь?
Неизвестный
06.02.2009, 16:09
общий
..(типа"в коде несколько мэйнов.. видел подобное, не содержащее нули.. ") - ссори мозг кипит, познаю с++
Неизвестный
06.02.2009, 16:12
общий
Так напишите условие человеческое. Хотя бы здесь на мини-форуме. Чтоб даже ребенку было понятно, что Вам нужно.
Неизвестный
06.02.2009, 16:18
общий
Visual Studio C++ 2008
Неизвестный
06.02.2009, 16:20
общий
Дана целочисленная прямоугольная матрица, найти номера первых столбцов, не содержащих ниодного отридцательного элемента, чтобы проверялся эхо контроль.. вводились только цифры, чтобы программа не закрывалась до тех пор пока не надоест выводить результаты.
Неизвестный
06.02.2009, 16:30
общий
Уточните следующие моменты:
1.Я нашел номера столбцов. Вывел их на экран. Что значит "чтобы проверялся эхо контроль.."?
2.Вводились только цифры. Это значит осуществить проверку корректности ввода, или игнорировать ввод любых других символов по мере их ввода?
3."чтобы программа не закрывалась до тех пор пока не надоест выводить результаты". Результат работы программы номера столбцов. Их что выводить несколько раз или программа должна спросить "желаете еще?" и в зависимости от ответа либо завершиться либо начать с начала?
Неизвестный
06.02.2009, 16:37
общий
<<Что значит "чтобы проверялся эхо контроль.."?
-диапазон цифр от 0-9,e, или выдает вы ввели недопустимый символ
<<"чтобы программа не закрывалась до тех пор пока не надоест выводить результаты".
должна спросить "желаете еще?" и в зависимости от ответа либо завершиться либо начать с начала
Неизвестный
06.02.2009, 17:51
общий
это ответ
Здравствуйте, Степанов Андрей Сергеевич!
Вот такая программа.

Приложение:
#include <locale>
#include <limits>
#include <iostream>
#include <iomanip>
#include <wchar.h>

using namespace std;

int main()
{
locale::global(locale("rus_rus.866"));
bool isCont;
do
{
unsigned int N=0,M=0;
// Вводим количество строк матрицы
while(!N)
{
wcout<<L"Количество строк матрицы:";
wcin>>N;
if(wcin.fail())
{
wcout<<L"Ошибка ввода!"<<endl;
wcin.clear();
}
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
// Вводим количество столбцов матрицы
while(!M)
{
wcout<<L"Количество столбцов матрицы:";
wcin>>M;
if(wcin.fail())
{
wcout<<L"Ошибка ввода!"<<endl;
wcin.clear();
}
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
// Матрица. Память распределяется динамически.
double **matrix=0;
try
{
// Указатели на строки
matrix=new double*[N];
// Обнуляем указатели, чтоб избежать ошибок в дальнейшем.
for(unsigned int i=0;i<N;i++)matrix[i]=0;
// Вводим матрицу
for(unsigned int i=0;i<N;i++)
{
// Выделяем память для строки
matrix[i]=new double[M];
for(unsigned int j=0;j<M;j++)
{
// Вводим элемент
while(1)
{
// Хотя в C++ индексы начинаются с нуля, для удобства пользователя нумеруем с единицы
wcout<<L'['<<i+1<<L"]["<<j+1<<L"]=";
wcin>>matrix[i][j];
if(wcin.fail())
{
wcout<<L"Ошибка ввода!"<<endl;
wcin.clear();
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
}
else
{
wcin.ignore(numeric_limits<streamsize>::max(),L'\n');
break;
}
}
}
}
// Выводим матрицу для контроля
wcout<<L"Исходная матрица:"<<endl;
for(unsigned int i=0;i<N;i++)
{
for(unsigned int j=0;j<M;j++)
wcout<<setw(7)<<matrix[i][j]<<L' ';
wcout<<endl;
}
// Ищем столбцы без отрицательных
wcout<<L"Столбцы не содержащие ни одного отрицательного элемента:";
// Счетчик столбцов
unsigned int cnt=0;
for(unsigned int j=0;j<M;j++)
{
for(unsigned int i=0;i<N;i++)
{
// Проверка
if(matrix[i][j]<0)goto is_not_it;
}
cnt++;
// Выводим номер столбца. Нумеруем с единицы
wcout<<j+1<<L',';
is_not_it:;
}
if(cnt)wcout<<L"\b ";
else wcout<<L"Отсутствуют";
wcout<<endl;
wcout<<L"Найдено "<<cnt
<<(cnt<5&&cnt>1?L" столбца":(cnt==1?L" столбец":L" столбцов"))
<<L" не содержащих отрицательных."<<endl;
}
catch (bad_alloc)
{
// Если не удалось выделить память выводим это
wcout<<L"Не могу выделить память для размещения матрицы"<<endl;
}
// Освобождаем память
if(matrix)
{
for(unsigned int i=0;i<N;i++)
if(matrix[i])delete []matrix[i];
delete []matrix;
matrix=0;
}
// Вопрос о продолжении
while(1)
{
wcout<<L"Желаете еще раз(Y/N)?:";
wchar_t reply=_getwche();
wcout<<endl;
switch(reply)
{
case L'Y':case L'y':case L'Д':case L'д':
isCont=true;
break;
case L'N':case L'n':case L'Н':case L'н':
isCont=false;
break;
default:
wcout<<L"Будьте внимательней!"<<endl;
continue;
}
break;
}
}while(isCont);
return 0;
}
Форма ответа