Показать полную графическую версию : [решено] Помогите решить задачу по С++
Страниц :
1
2
3
4
5
[
6]
7
8
9
10
11
12
13
14
15
16
Klim1988
21-10-2010, 07:41
Подскажу "куда думать дальше"»
не получается ввести данные переменой
int main(array<System::String ^> ^args)
{
char *s1;
char *s2="132465";
printf("Enter string: ");
scanf_s("%s", &s1);
printf("%s", &s2);
scanf_s("%s", &s1);
return 0;
}
Klim1988, Если придется из тебя данные клещами тянуть, то ничего путного из этого не выйдет.
не получается ввести данные переменой »
И куда мне это? Все остальное то где?
ЕМНИП char* не рекомендуется к применению новичкам. Уже написана более удобная "обертка" для работы со строками.
int main(array<System::String ^> ^args)
{
char *s1;
char *s2="132465";
printf("Enter string: ");
scanf_s("%s", &s1);
printf("%s", &s2);
scanf_s("%s", &s1);
return 0;
}
в цифрах путаницы нет?
Klim1988
21-10-2010, 09:59
char* не рекомендуется к применению новичкам »
и не хотелось бы его использовать, но это пока единственный вариант что пришло из интернета в мой мозг
Уже написана более удобная "обертка" для работы со строками. »
А как она выглядит эта ""Обертка" код к ней можно посмотреть?
вот что делал, это программа выводит строку целиком
#include "stdafx.h"
#include <string.h>
#include <conio.h>
#include <iostream>
#include <stdio.h>
int main(void)
{
using namespace std;
const int n = 80;
char s[n];
cin.getline(s, n);
cout<<s<<endl;
cin.get(s, n);
cout<<s<<endl;
return 0;
{
как теперь преобразовать строку так чтобы все первые буквы слов стали заглавными
Раз (http://www.rsdn.ru/article/cpp/cstr.xml), Два (http://ru.wikipedia.org/wiki/String.h)
как теперь преобразовать строку так чтобы все первые буквы слов стали заглавными »
Это я у тебя хочу спрость. Как найти первые буквы предложений?
Klim1988
21-10-2010, 12:53
Это я у тебя хочу спрость. Как найти первые буквы предложений? »
не предложений а слов в предложении, увы сам незнаю :( , думал вы знаете
думал вы знаете »
Думай, думай, шевели мозгами! (с) :)
Чем просто буква отличается от первой буквы? Буквы предложения. Соотв.
Чем заканчивается предложение и как одно предложение отделяется от другого?
Klim1988
21-10-2010, 14:15
Думай, думай, шевели мозгами! (с) »
получилось что то вот такое
int main(void)
{
using namespace std;
char s[255];
int i;
cout<<"Enter string: ";
cin.getline(s,255);
s[0] = toupper(s[0]);
for(i=1;i<strlen(s);i++){
if (s[i]==' '){
s[i+1] = toupper(s[i+1]);
}
}
cout << s << endl;
getch();
return 0;
}
Теперь вопрос как перевести System::String в char и обратно???
Теперь вопрос как перевести System::String в char и обратно? »
А надо? Со строкой работать дальше не получится?
BTW алгоритм не совсем верен и в ряде случаев даст ошибку.
Klim1988
22-10-2010, 10:21
А надо? Со строкой работать дальше не получится? »
состроками работать не умеем
BTW алгоритм не совсем верен и в ряде случаев даст ошибку. »
а что такое BTW алгоритм ???
BTW - это сокращение By the Way кстати (попутно) говоря.
Кстати говоря приведенный алгоритм не рабочий.
Может поиск (http://www.google.ru/search?hl=ru&lr=&newwindow=1&q=C%2B%2B+string+char+documentation&aq=f&aqi=&aql=&oq=&gs_rfai=) поможет в переводе string -> char и обратно?
Klim1988
22-10-2010, 11:38
Кстати говоря приведенный алгоритм не рабочий »
а этот :
#include "stdafx.h"
#include <string.h>
#include <conio.h>
#include <iostream>
#include<iterator>
#include <stdio.h>
char UpSymbol(char c){
int i=(int)c;
if ((i>96)&&(i<122)){
i=i-32;
};
if ((i>-97)&&(i<-80)){
i=i-32;
};
if ((i>-33)&&(i<-16)){
i=i-80;
};
if (i==-15){
i=-16;
};
return (char)i;
}
int main(void)
{
using namespace std;
char s[255];
int i;
cout<<"Enter Text: ";
cin.getline(s,255);
s[0]=UpSymbol(s[0]);
for(i=0;i<strlen(s);i++){
if (s[i]==' '){
s[i+1]=UpSymbol(s[i+1]);
}
}
cout << "Resultat: " << s << endl;
getch();
}
terminalek можно выделить два буфера на три символа и сверять их по тексту, если совпали в новую строчку отправить 2 и один из буферов, потом всё заново с прирашеним 2йки если ещё есть повторы. Или же сразу на месте до конца фразы проверить сколько раз встретился буфер.
int sp = 0, c;
while( (c = getchar()) != EOF) {
if(isspace(c)) {
if(sp) // что означает данное условие? если isspace возвращает 0?
continue; // суть continue тоже не совсем понял, объясните пжлст.
else sp = 1; // что дает sp = 1?
}
else
sp = 0;
putchar(c);
} >> (http://forum.oszone.net/post-1523637.html#post1523637)
if(sp) - означает "если sp не ноль" Условия выше так же, если isspace вернул не ноль
continue перейти к следующему "приращению" цикла while, то есть к следующему символу (если предыдущее условие ^^ выполнилось)
присваиваем sp 1 для того что б перейти следующий раз сразу к второму символу (значит один пробел уже напечатался, а второй и последующий подряд будет отловлен).
Если это не пробел был в самом начале зануляем sp сразу.
Если не было перехода по continue печатаем символ (любой, пробел единичный так же).
theBest4ainik
24-10-2010, 14:19
pomogite rewit zada4u.
vvodits9 kakoe to 4islo, naprimer 3. teper vvodits9 ego soderjimoe: 1 4 6
nado vivesti v posledovatelnosti : 6 4 1
no est glavnoe uslovie: nelz9 ispolzovat massiv i povtoreni9 kak while i for, daje dl9 vvoda; nujno ispolzovat RECURSIU.
#include <iostream>
using namespace std;
unsigned long rec (unsigned long);
int main(){
int n;
cin >> n;
cout << rec (n);
return 0;
}
unsigned long rec (unsigned long n){
int x;
cin >> x;
if (n==1)
return x ;
else
return rec(n-1);
}
vot tak 9 napisal kod, no ne mogu naiti owibku, plz daite ideu, gde mo9 owibka
theBest4ainik, Язык конференции русский, если у вас нет возможности набирать русский текст, воспользуйтесь виртуальной клавиатурой, находится справа от поля ввода.
http://s53.radikal.ru/i142/1010/b2/b49639064bf2.png
ValeraRU
24-10-2010, 23:15
Здравствуйте,нужна помощь,в общем на лаб. по программированию сейчас идут задачи с массивом,в связи с нехваткой знаний обращаюсь к вам за помощью) помогите чем сможете
вот задача(пример)
/*
Подключние рабочих библиотек:
<stdio.h> - библиотека ввода/вывода
*/
#include <stdio.h>
int main(int argc, char* argv[])
{
/* Именованная константа, определяющая количество элементов массива */
const MAX_ELEMENTS = 8;
/* Объявление и инициализация переменных */
float m[MAX_ELEMENTS];
float sum = 0;
float result = 1;
int iMax, iMin;
/* Запрашиваем ввод данных с клавиатуры */
for (int i = 0; i < MAX_ELEMENTS; i++)
{
printf("m[%d] = ", i);
scanf("%f", &m[i]);
}
/* Принимаем индексы максимального и минимального массива равными 0 */
iMin = iMax = 0;
for (i = 0; i < MAX_ELEMENTS; i++)
{
/* Вычисляем сумму отрицательных элементов массива */
if (m[i] < 0) sum += m[i];
/* Находим индексы максимального и минимального элементов массива */
if (m[i] > m[iMax]) iMax = i;
if (m[i] < m[iMin]) iMin = i;
}
/* Находим произведение элементов массива, находящихся между минимальным и максимальными элементами */
for (i = ((iMax < iMin) ? iMax : iMin);
i <= ((iMax > iMin) ? iMax : iMin);
result *= m[i++]);
/* Выводим на экран результат вычислений */
printf("\nСумма отрицательных элементов = %.2f\n", sum);
printf("Результат = %.2f\n\n", result);
/* Сортировка элементов массива по возрастанию */
for (i = 0; i < MAX_ELEMENTS; i++)
{
for (int j = i + 1; j < MAX_ELEMENTS; j++)
{
if (m[i] > m[j])
{
result = m[i];
m[i] = m[j];
m[j] = result;
}
}
}
/* Вывод на экран отсортированного по возрастанию массива */
printf("Отсортированный массив:\n");
for (i = 0; i < MAX_ELEMENTS; printf("%.2f ", m[i++]));
return 0;
}
Результат выполнения программы:
m[0] = 3
m[1] = 7
m[2] = -4
m[3] = 8
m[4] = -1
m[5] = 9
m[6] = 0
m[7] = 7
Сумма отрицательных элементов = -5.00
Результат = 288.00
Отсортированный массив:
-4.00 -1.00 0.00 3.00 7.00 7.00 8.00 9.00
вот условие(моей задачи)
В одномерном массиве, состоящем из п вещественных элементов, вычислить:
1) сумму положительных элементов массива;
2) произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами.
Упорядочить элементы массива по убыванию.
и вот что я написал
#include <stdio.h>
#include <math.h>
int main(int argc, char* argv[])
{
const MAX_ELEMENTS = 80;
float m[MAX_ELEMENTS];
float sum = 0;
float result = 1;
int iMax, iMin,n;
FILE *in=fopen("1.txt","r");
fscanf(in,"%d", &n);
for (int i = 0; i < n; i++)
{
// printf("m[%d] = ", i);
fscanf(in,"%f", &m[i]);
}
iMin = iMax = 0;
for (i = 0; i < MAX_ELEMENTS; i++)
{
if (m[i] > 0) sum += m[i];
if (m[i] > m[iMax]) iMax = i;
if (m[i] < m[iMin]) iMin = i;
}
for ( i = ((iMax < iMin) ? iMax : iMin);
i <= ((iMax > iMin) ? iMax : iMin);
result *= m[i++]);
printf("\n summa polojitelinih 4isel = %.2f\n", sum);
printf("rezultat = %.2f\n\n", result);
for (i = 0; i > MAX_ELEMENTS; i--)
{
for (int j = i - 1; j < MAX_ELEMENTS; j--)
{
if (m[i] < m[j])
{
result = m[i];
m[i] = m[j];
m[j] = result;
}
}
}
printf("otsortirovanii massiv:\n");
for (i = 0; i < MAX_ELEMENTS; printf("%.2f ", m[i++]));
return 0;
}
помогите доработать =(
очень надо!
и вот вторая задача
пример:
ДВУМЕРНЫЕ МАССИВЫ
Пример задания: Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом. Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
Пример решения задачи:
#include <stdio.h>
int main(int argc, char* argv[])
{
/* Объявляем и инициализируем матрицу 8х8 */
int matrix[8][8] = {
{ 2, 7, 2, 7, 1, 4, 0, 3 },
{ 1, 0, 7, 6, 0, -8, 3, 5 },
{ 2, 7, 1, 8, 1, 4, 9, 3 },
{ 9, 2, 8, 5, 2, 0, 0, 6 },
{ 7, 1, 1, 3, 9, 3, 9, 1 },
{ 8, 2, 4, 9, 1, -6, 4, 9 },
{ 0, 3, 9, 0, 9, 4, 8, 8 },
{ 1, 8, 3, 2, 8, 2, 8, 0 }
};
int i, j, iSumm; /* Счетчик и переменная для хранения суммы */
bool bFlag; /* Флаг */
/*----------------------------------------------*/
/* П Е Р В А Я Ч А С Т Ь З А Д А Н И Я */
/*----------------------------------------------*/
printf("k = ");
for (i = 0; i < 8; i++)
{
/* Присваиваем Флагу исходное значение */
bFlag = true;
for (j = 0; j < 8; j++)
{
/* Сравниваем элемент i-й строки j-го столбца с элементом j-й строки i-го столбца. В случае их несоответствия присваиваем Флагу значение Ложь и прерываем цикл по j конструкцией break */
if (matrix[i][j] != matrix[j][i])
{
bFlag = false;
break;
}
}
/* В случае сохранения флагом исходного значения выводим на экран номер соответствующей строки */
if (bFlag) printf("%d ", i);
}
/*----------------------------------------------*/
/* В Т О Р А Я Ч А С Т Ь З А Д А Н И Я */
/*----------------------------------------------*/
printf("\n\n");
for (i = 0; i < 8; i++)
{
/* Присваиваем переменным исходные значения */
bFlag = false;
iSumm = 0;
for (j = 0; j < 8; j++)
{
/* При нахождение хотя бы одного отрицательного элемента присваиваем Флагу значение Истина, обозначающее необходимость вывода Суммы на экран */
if (matrix[i][j] < 0) bFlag = true;
/* Суммируем значения элементов i-й строки */
iSumm += matrix[i][j];
}
/* В случае нахождения в строке хотя бы одного отрицательного элемента выводим на экран сумму элементов i-й строки */
if (bFlag) printf("Сумма элементов строки #%d = %d\n", i, iSumm);
}
return 0;
}
Результат выполнения программы:
k = 2 6
Сумма элементов строки #1 = 14
Сумма элементов строки #5 = 31
что надо сделать мне :
Осуществить циклический сдвиг элементов квадратной матрицы размерности МхN вправо на k элементов таким образом: элементы 1-й строки сдвигаются в последний столбец сверху вниз, из него - в последнюю строку справа налево, из нее - в первый столбец снизу вверх, из него - в первую строку; для остальных элементов - аналогично.
ребята очень нужно,заранее благодарю
Это лучше заменить
iMin = iMax = 0;наiMin = iMax = m[0]; // первый элемент массива, потому что ноль это значение, и если значения будут от -n до -1 то условие никогда не будет верным.[
q=ValeraRU]помогите доработать =(
очень надо! »[/q]Что не получается в задаче? В чём нужна доработка?
ValeraRU
25-10-2010, 01:37
2) произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами. Упорядочить элементы массива по убыванию. »
вот это я не знаю как написать правильно..
и вторую задачу вообще понятия не имею,дело в том что препод такой попался,т.е. если без знаний к нему пришел,то можешь спать,а я выучить С++ хочу и вот на лабах,мне не хватает знаний :(
Попробовал решить часть вычисления произведения от минимального до максимального, отдельной задачей...
/* Находим индексы максимального и минимального элементов массива */
if (m[i] > m[iMax]) iMax = i;
if (m[i] < m[iMin]) iMin = i;
}
/* Находим произведение элементов массива, находящихся между минимальным и максимальными элементами */
for (i = ((iMax < iMin) ? iMax : iMin);
i <= ((iMax > iMin) ? iMax : iMin);
result *= m[i++]);
.... »
#include <iostream>
using namespace std;
int main() {
const int size = 8; // Наш размер массива. Можно изменить произвольно размер
double z, min, max, array[size] = {0};
int iMin, iMax, Result = 1;
// Ввод значений в массив
for(int i = 0; i < size; i++){
cout << "Array[" << i << "] = ";
cin >> array[i];
}
max = min = array[0]; // Присваиваем первый элемент
// Поиск максимального и минимального значений
for(int i = 1; i < size; i++){ // Начинаем с 1-го элемента, т.к. array[0] мы уже присвоили
if(array[i] < min){
min = array[i];
iMin = i; // Запоминаем индекс массива в котором хранится минимальное значение
}
if(array[i] > max){
max = array[i];
iMax = i; // Запоминаем индекс массива в котором хранится максимальное значение
}
}
cout << "\nMinimal = " << min << endl;
cout << "Maximal = " << max << endl;
cout << endl;
// Вычисляем произведение диапазона от индекса минимального значения, до индекса максимального значения
if(iMin < iMax)
for(int i = iMin; i < iMax; i++)
Result *= array[i];
else if(iMin > iMax)
for(int i = iMax; i < iMin; i++)
Result *= array[i];
cout << "Proisvedenie Min - Max = " << Result << endl; // Выводим результат
cin >> z;
return 0;
}
Klim1988
26-10-2010, 07:47
Народ помогите пожалуйста завтра сдавать программу, а ее нужно преобразовать из консольной в визуальную, т.е. чтобы программа работала с кнопок
вот код программы
#include "stdafx.h"
#include <string.h>
#include <conio.h>
#include <iostream>
#include<iterator>
#include <stdio.h>
char UpSymbol(char c){
int i=(int)c;
if ((i>96)&&(i<122)){
i=i-32;
};
if ((i>-97)&&(i<-80)){
i=i-32;
};
if ((i>-33)&&(i<-16)){
i=i-80;
};
if (i==-15){
i=-16;
};
return (char)i;
}
int main(void)
{
using namespace std;
char s[255];
int i;
cout<<"Enter Text: ";
cin.getline(s,255);
s[0]=UpSymbol(s[0]);
for(i=0;i<strlen(s);i++){
if (s[i]==' '){
s[i+1]=UpSymbol(s[i+1]);
}
}
cout << "Resultat: " << s << endl;
getch();
}
Klim1988
26-10-2010, 13:26
Решил я свою задачу вот ссылка на нее http://forum.oszone.net/thread-189320.html
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.