Суббота, 27 Апреля 2024, 00:39

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Программирование » C/C++ » Помогите студенту, пжл (массивы...)
Помогите студенту, пжл
b4mvДата: Понедельник, 10 Октября 2011, 12:26 | Сообщение # 1
частый гость
Сейчас нет на сайте
Надо найти самое большее значение элемента массива, стоящего до первого четного элемента в массиве.
Т.Е. например массив arr[] {1,3,11,7,8,10,5,6,77}
Получается надо вывести восмерку.
Никак не могу придумать как сделать проверку на максималдьность значения... на четность, на все остально нужное могу, а вот на максимальность...
Помогите пжл...
LunarPixelДата: Понедельник, 10 Октября 2011, 12:37 | Сообщение # 2
старожил
Сейчас нет на сайте
Записываешь в переменную значение из первой ячейки. Сравниваешь со значением из следующей ячейки. Если значение в следующей ячейке больше, то перезаписываешь переменную на это значение, иначе переходишь к следующей ячейке.

Таким образом из {1,3,11,7,8,10,5,6,77} в переменную будет записана сначала 1, затем она будет сравниваться с 3, т.е. 3 больше 1, то в переменную запишется 3, затем она сравнивается с 11, т.к. 11 больше, то в переменную записывается 11, потом сравнивается с 7, т.к. 7 меньше, то в переменной так и остается 11 и т.д. smile


noTformaTДата: Понедельник, 10 Октября 2011, 12:41 | Сообщение # 3
Ukrainian independent game developer
Сейчас нет на сайте
int arr[] = {1,3,11,7,8,10,5,6,77} ;
int max = arr[0];
for(int i = 1; i < длина массива; i++)
{
if(arr[i] > max)
{
max = arr[i];
}
}

cout << max;

Как то так.


@noTformaT
MatouДата: Понедельник, 10 Октября 2011, 12:49 | Сообщение # 4
Исходный коТ
Сейчас нет на сайте
int arr[] = {1,3,11,7,8,10,5,6,77} ;
int max = arr[0];
for(int i = 1; i < длина массива; i++)
{
if((arr[i] % 2) == 0) // проверка на четность
break;

if(arr[i] > max)
{
max = arr[i];
}
}

cout << max;



b4mvДата: Понедельник, 10 Октября 2011, 13:07 | Сообщение # 5
частый гость
Сейчас нет на сайте
Всем спасибо)

Сообщение отредактировал b4mv - Понедельник, 10 Октября 2011, 13:14
РесторДата: Понедельник, 10 Октября 2011, 13:32 | Сообщение # 6
был не раз
Сейчас нет на сайте
"Длина массива" можно на sizeof(arr)/sizeof(arr[0])-1 заменить:
Code

#include <iostream>
using namespace std;

int main()
{
     int max, arr[] = {15,3,11,7,3,10,5,6,77,55,13};
     if((arr[0] % 2) == 0)  
     {
         cout<<"Maximum number is not found ";
         system("pause");
         return 0;
     }
     else max = arr[0];

     for(int i = 1; i < sizeof(arr)/sizeof(arr[0])-1; i++)
     {
         if((arr[i] % 2) == 0)  
         break;
         if(arr[i] > max)
         {
         max = arr[i];
         }
     }
     cout << "Maximum number is "<<max<<endl;
     system("pause");
     return 0;
}
b4mvДата: Понедельник, 10 Октября 2011, 14:02 | Сообщение # 7
частый гость
Сейчас нет на сайте
Рестор, Спасибо)
З.Ы. Псомотрев все коды, немного помозговав, я таки сделал лабу)) спасибо всем большое еще раз))
nilremДата: Понедельник, 10 Октября 2011, 14:14 | Сообщение # 8
Просветленный разум
Сейчас нет на сайте
b4mv,
Студент, а ты на кого учишься?


Windmill 2

WindMill 2D Game Engine
b4mvДата: Воскресенье, 27 Ноября 2011, 07:58 | Сообщение # 9
частый гость
Сейчас нет на сайте
Системы автоматизированного проектирования) в школе просто программирования не было... Ваш курс видел и весьма за него благодарен)) очень помогло)

Добавлено (27.11.2011, 07:58)
---------------------------------------------
И снова я... И снова с проблемой(...
Ломал себе мозг где-то 4 часа...
Вот задание:

Quote
Подсчитать количество цифр в слове и заменить все нецифры в слове на цифру, обозначающую это количество.

а вот мой код:
Code
#include <iostream>
using namespace std;
int main (void)
{
     int n, q, t;  
     bool c;
     char *str;
     str=new char[1];
     str[0]='\0';
     char num[]="01234567890";
     cout << "Input your string:";
     cin >> str;
     n=strlen(str);
     q=strlen(num);
     for (int i=0; i<n; i++)
     {
         for (int j=0; j<q; j++)
         {
                   if(str[i]!=num[j])
                   {                    
                        str[i]=num[i];
                        break;
                   };
         };
     };
  cout << str;
  cin.get();
  cin.get();
  return 0;
}  

Компилируется без ошибок, а вот работает как попало... а именно заменяет не только буквы, но и цифры...
Подскажите пожалуйста...
0x90Дата: Воскресенье, 27 Ноября 2011, 09:46 | Сообщение # 10
участник
Сейчас нет на сайте
Quote (b4mv)
Подсчитать количество цифр в слове и заменить все нецифры в слове на цифру, обозначающую это количество.

Не совсем понял, что тебе нужно. К примеру, слово
Quote

b4mv

должно быть заменено на
Quote

1411

???
Если да, то
Code


#include <stdio.h>
#include <string.h>;
#include <ctype.h>

int main()
{
     char str[30];
     char tmp;
     int str_length = 0;
     int num_of_digits = 0;

     scanf("%s",str);
     str_length = strlen(str);

     for(int i = 0; i<str_length; i++)
         if(isdigit(str[i])) num_of_digits++;

     sprintf(&tmp,"%d",num_of_digits);
     
     for(int i = 0; i<str_length; i++)
         if(!isdigit(str[i]))
         {
             str[i] = tmp;
         }
        

     printf("%s",str);
     return 0;
}

или поясни задачу.
b4mvДата: Воскресенье, 27 Ноября 2011, 10:36 | Сообщение # 11
частый гость
Сейчас нет на сайте
Ну, как я понял - нужно подсчитать количество буков, а потом каждую букву заменить на это число... например - b4mv -> 3433...
как-то так)
За код спасибо, но желательно использовать как можно меньше функций)
0x90Дата: Воскресенье, 27 Ноября 2011, 11:15 | Сообщение # 12
участник
Сейчас нет на сайте
Ну просто у тебя написано, что нужно все нецифры заменить на цифру, обозначающую количество чисел в слове.
Code

#include <stdio.h>
#include <string.h>;

int main()
{
     char str[30];

     char tmp[2];
     int str_length = 0;
     int num_of_letters = 0;

     scanf("%s",str);

     str_length = strlen(str);

     for(int i = 0; i<str_length; i++)
     {
         if(str[i]<0x3A) continue;
         num_of_letters++;
     }

     sprintf(tmp, "%d", num_of_letters);

     for(int i = 0; i<str_length; i++)
     {
         if(str[i]>0x39) str[i] = tmp[0];
     }

     printf("%s",str);
     return 0;
}

Малость коряво, но работает. Убрал isdigit, без остальных функций не обойтись по-любому.
TimKruzДата: Воскресенье, 27 Ноября 2011, 11:26 | Сообщение # 13
старожил
Сейчас нет на сайте
Quote (b4mv)
Подсчитать количество цифр в слове и заменить все нецифры в слове на цифру, обозначающую это количество.

Т.е. на количество цифр, а не букв. Вот только странно то, что на цифру, а не число. Гарантируется, что в строке не более девяти цифр?
Ну, тут просто. Описываем множество цифр; потом проходим по строке, и если буква на i-ной позиции входит в множество (т.е. цифра), то увеличиваем отдельную переменную-счётчик; в следующем цикле, если буква на i-ной позиции не входит в множество (т.е. не цифра), то заменяем её на значение переменной-счётчика.
Quote (b4mv)
За код спасибо, но желательно использовать как можно меньше функций)

В такой задаче вообще функций ни каких использовать не надо, ну, кроме функции длины строки. wacko

Quote (b4mv)
Надо найти самое большее значение элемента массива, стоящего до первого четного элемента в массиве.
Т.Е. например массив arr[] {1,3,11,7,8,10,5,6,77}
Получается надо вывести восмерку.

Там надо вывести 11 - наибольшее значение до первого чётного (восьми).

P.S. С/С++ не знаю, но человек, знающий синтаксис и основные функции языка сможет перевести любой простой алгоритм на свой язык. wink
b4mv, внимательнее читай условия задач.


b4mvДата: Воскресенье, 27 Ноября 2011, 12:01 | Сообщение # 14
частый гость
Сейчас нет на сайте
Quote (TimKruz)
В такой задаче вообще функций ни каких использовать не надо, ну, кроме функции длины строки.

ну да, точно) оговорился) - как можно меньше не функций, а операторов, типа strlen, scanf и прочее. в идеале обойтись только библиотекой iostream, а тож мне это еще защищать надо, а я на код смотрю и ничего почти не понимаю.
Quote (TimKruz)
b4mv, внимательнее читай условия задач.

постараюсь)), просто на сайт пишу обычно, когда мозга уже нету))
0x90, спаисбо))
TimKruz, и тебе иоде за замечания и алгоритм))
0x90Дата: Воскресенье, 27 Ноября 2011, 12:12 | Сообщение # 15
участник
Сейчас нет на сайте
Quote (TimKruz)
В такой задаче вообще функций ни каких использовать не надо, ну, кроме функции длины строки.

Ну её то как раз убрать не проблема, а вот что делать со scanf, printf?
Quote (b4mv)
как можно меньше не функций, а операторов, типа strlen, scanf и прочее

strlen и scanf и есть функции. Вместо scanf можно юзать cin из iostream, вместо printf cout, strlen можно написать самому.
b4mvДата: Воскресенье, 27 Ноября 2011, 12:45 | Сообщение # 16
частый гость
Сейчас нет на сайте
я совсем запутался... функции этож вроде:
Code

int main (void)
double omg (blablabla)

и т.д.
или ошибаюсь?

Добавлено (27.11.2011, 12:45)
---------------------------------------------
Посидел, подумал и вот что получилось:

Code


#include <iostream>
using namespace std;
int main (void)
{
     int n, q, t=0;  
     char *str;
     str=new char[1];
     str[0]='\0';
     char num[]="0123456789";
     cout << "Input your string:";
     cin >> str;
     n=strlen(str);
     q=strlen(num);
     for(int i=0; i<n; i++)
     {
             for(int j=0; j<q; j++)
             {
                 if(str[i]==num[j])
                 {
                    t+=1;
                    break;
                 };
             };
     };
     for(int i=0; i<n; i++)
     {
         for(int j=0; j<q; j++)
         {   
             Вот тут чего писать?0о              
         };    
     };
     cout << str << endl;
     cout << t;
  cin.get();
  cin.get();
  return 0;
}  

Число цифр в слове считает...
А вот что написать во втором цикле, чтобы заменял буквы нa t(число цифр в слове), так и не могу придумать... Либо меняет все символы в слове на первую/последнюю цифру, либо вместо сех символов выводит сердечки/бубны/крести/пики, а вот чтоб нормально запахало...
0x90Дата: Воскресенье, 27 Ноября 2011, 12:54 | Сообщение # 17
участник
Сейчас нет на сайте
Quote (b4mv)
str=new char[1];

Ты выделяешь память только для одного символа, поменя 1 хотябы на 30.
Зачем эти ужасные двойные циклы? Тебе уже все объяснили, просто поменя scanf на cin и printf на cout, вот и все.
b4mvДата: Воскресенье, 27 Ноября 2011, 13:14 | Сообщение # 18
частый гость
Сейчас нет на сайте
Quote (0x90)
Ты выделяешь память только для одного символа, поменя 1 хотябы на 30.
Зачем эти ужасные двойные циклы? Тебе уже все объяснили, просто поменя scanf на cin и printf на cout, вот и все.

по лекции делал... там так...
таки не все понятно:
1.
Quote (0x90)
scanf("%s",str)
- ?
2.
Quote (0x90)
if(str[i]<0x3A) continue
- ?
3.
Quote (0x90)
sprintf(tmp, "%d", num_of_letters)
- ?
Вот эти места в коде непонятны... что за %s, 0x3A, continue и т.д.?
DemeronДата: Воскресенье, 27 Ноября 2011, 13:18 | Сообщение # 19
User created in C++
Сейчас нет на сайте
Quote (b4mv)
что за %s

означает что ты сканируешь строку в str
Quote (b4mv)
0x3A

код символа
Quote (b4mv)
continue

"Оператор continue тоже предназначен для прерывания циклического процесса, организуемого операторами for, while, do-while. Но в отличае от оператора break, он не прекращает дальнейшее выполнение цикла, а только немедленно переходит к следующей интерации того цикла, в теле которого он оказался. Он как бы имитирует безусловный переход на конечный оператор цикла, но не за ее пределы самого цикла. Программа на примере 5.1 использует оператор continue для пропуска отрицательных элементов массива, суммируя только положительные."
b4mvДата: Воскресенье, 27 Ноября 2011, 13:34 | Сообщение # 20
частый гость
Сейчас нет на сайте
0x90, а прога-то и не работает твоя... во всяком случае на "дев с++"
Форум игроделов » Программирование » C/C++ » Помогите студенту, пжл (массивы...)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг