Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2011, 11:11   #1
Дмитрий Алексеев
 
Регистрация: 17.01.2011
Сообщений: 9
Восклицание Решение другим способом

Призываю к помощи знатоков для решения более простым способом(как я понял без массива и с помощью подпрограмм) данных задач:

1.Дан текст произвольной длины, оканчивающийся точкой с запятой. Подсчитать количество цифр в тексте.
Код:
#include <iostream.h>
#include <string.h>

int main(){
int chislo=0;                                             //считает количество цифр
int strl;                                                    //содержит длину строки
char stroka[512];                                      //хранит введенную строку
cin.getline(stroka,sizeof(stroka),' ;');           //сохраняет введенную строку в переменную strl
strl=strlen(stroka);                                   //определяем длину строки
for (int i=0;i<strl;i++){                             //запускаем цикл и пробегаем каждый символ строки
switch(stroka[i]){                                     //если символ строки совпадает с одной из цифр, то
case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8 ':case'9': chislo++;break;    //увеличиваем chislo на единицу
default:break;                                         //если не совпало - увеличиваем i на единицу и переходим к след символу в строке
}
}                                                          //и так до последнего символа

cout<<"schislo= "<<chislo;                     //выводим кол-во цифр в строке
return 0;                                               //конец программы
}



2. Даны две строки  длиной до 80 символов. 
а) Определить, в какой строке больше цифр: в первой или во второй (вывести соответствующее сообщение). 

/* proga4 */
#include <iostream.h>

int main(){
char str1[80]="",str2[80]="";  // хранит введеные строки
int ch1=0,ch2=0;
cin.getline(str1,80,'\n');   // сохраняет введеные строки в переменную str1
cin.getline(str2,80,'\n');  );   // сохраняет введеные строки в переменную str2
for (int i=0;i<80;i++){       // запускает цикл и пробегает каждый символ строки
  switch(str1[i]){              //если  совпадает с условием,то
   case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':ch1++;break;                         //увеличиваем число на единицу
   default:break;             //переходим на другой символ
 }
}
for (int i=0;i<80;i++){
 switch(str2[i]){
   case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8':case'9':ch2++;break;
   default:break;
 }
}
return 0;
}

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 02.02.2011 в 14:30.
Дмитрий Алексеев вне форума Ответить с цитированием
Старый 02.02.2011, 11:31   #2
xDyPx
Форумчанин
 
Аватар для xDyPx
 
Регистрация: 21.01.2009
Сообщений: 148
По умолчанию

Я предполагаю, что текст в первой задачке вводится по-символьно. Соответственно нужно сделать ввод символов до тех пор, пока не встретиться символ ";" и, если введенный символ является числом, то увеличиваем счетчик.
МОЙ САЙТ
Компьютер позволяет решать все те проблемы, которые до появления компьютера не существовали.
xDyPx вне форума Ответить с цитированием
Старый 02.02.2011, 11:47   #3
Дмитрий Алексеев
 
Регистрация: 17.01.2011
Сообщений: 9
По умолчанию

Да,примерно так и надо...только вот я догнать не могу как это сделать.Если кто может отзовитесь,буду душевно благодарен!!!
Дмитрий Алексеев вне форума Ответить с цитированием
Старый 02.02.2011, 11:51   #4
Wolf143
Новичок
Джуниор
 
Регистрация: 02.02.2011
Сообщений: 3
По умолчанию

№1. тема: задачи на одномерный массив.
условие: сумму двух наименьших элементов.

№2. тема: задачи на одномерный массив.
условие: в векторе а найти максимальное значение произведения a индекс (i) • a индекс (n-1)+1, после чего все элементы, равны минимальному элементу вектора, занимать на найденое значения произведения.
Wolf143 вне форума Ответить с цитированием
Старый 02.02.2011, 12:16   #5
Дмитрий Алексеев
 
Регистрация: 17.01.2011
Сообщений: 9
По умолчанию

Все равно не получается....Ребята кто способен помогите разобраться решив задачи другим способом....
Дмитрий Алексеев вне форума Ответить с цитированием
Старый 02.02.2011, 17:38   #6
0479
Форумчанин
 
Аватар для 0479
 
Регистрация: 27.09.2009
Сообщений: 153
По умолчанию

Могу помочь только в рамках языка на котором сам программирую. Написал на яве.Может быть кому то будет полезно.
Первая задача:

Код:
package javaapplication2;
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
     public static void main(String[] args) throws Exception {
     BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
     System.out.print("Введите текст");
     String text; //Переменная под текст
     int j=0; //Переменная под счётчик
     text = buf.readLine(); //Считываем текст
     for (int i=0;i<text.length();i++)  {// В цикле просматриваем строку
     char symbol = text.charAt(i); //Переменная под символ
     if (Character.isDigit(symbol)){j++;}//Если символ число, то наращиваем счётчик
     }
     System.out.print("Цифр в тексте"+j+".");//Сообщаем количество
    }
}
Собственно здесь всё просто.Основа это функция isDigit, проверяющая принадлежность к цифрам.Ну а всё остальное должно быть понятно.

Вторая задача:

Код:
package javaapplication3;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {
     public static void main(String[] args) throws Exception {
     BufferedReader buf=new BufferedReader(new InputStreamReader(System.in));
     String text;//Переменная под первую строку
     String text1;//Переменная под вторую строку
     int n=0;
     int j=0; //Переменная под счётчик первой строки
     int k=0; //Переменная под счётчик второй строки
     loop: while(n<2){
     System.out.print("Введите первую строку ");//Вводим первую строку
     text = buf.readLine();//Считываем
     if (text.length()<80)//Проверяем количество символов
     {j=process(text);n++;}//Выполяняем описанный ниже метод для строки
     else {System.out.print("Первая строка больше восьмидесяти символов");break loop;}
     //Ну или выходим из цикла
     System.out.print("Введите вторую строку ");//Вводим первую строку
     text1 = buf.readLine();//Считываем
     if (text1.length()<80)//Тоже самое со второй строкой
     {k=process(text1);n++;}
      else {System.out.print("Вторая строка больше восьмидесяти символов");break loop;}
     System.out.println("Цифр в первой строке "+j+".");//Сообщаем количество
     System.out.println("Цифр во второй строке "+k+".");
     if (j>k){System.out.println("В первой строке цифр больше.");}//Вывод инфы о сравнении
     else {System.out.println("Во второй строке цифр больше.");}}
     }
     static int process(String text) {//Метод осуществляющий подсчёт строк
      int j=0;//Переменная счётчика
for (int i=0;i<text.length();i++)  {//Цикл по просмотр строки
     {//Проверяем условие 80 символов
     char symbol = text.charAt(i);//Считываем посимвольно
     if (Character.isDigit(symbol)){j++;}}//Если символ - цифра наращиваем счётчик
     }
	return j;//Возвращаем значение счётчика
}}
Со второй задачей малость перемудрил.Так как есть условие 80 символьности.А функция charat продолжает работать и посимволам которые не входят.Поэтому пришлось добавить проверку.А чтобы два раза цикл не писать сделан класс в которо все манипуляции проводятся.
0479 вне форума Ответить с цитированием
Старый 02.02.2011, 18:24   #7
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Код:
case'0':case'1':case'2':case'3':case'4':case'5':case'6':case'7':case'8 ':case'9'
эту часть можно заменить на:
Код:
if( sym >= '0' && sym <= '9'){....}
NiCola999 вне форума Ответить с цитированием
Старый 02.02.2011, 18:33   #8
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Код:
#include <iostream.h>
#include <ctype.h>
int main ()
{
  char ch;
  int count = 0;
  do
  {
       cin >> ch;
       if (isdigit(ch)) count++;
  } while (ch != ';');
  cout << count << endl;
  cin.get();
  return 0;
}
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 02.02.2011, 20:13   #9
kaljan775
:D
Форумчанин
 
Аватар для kaljan775
 
Регистрация: 26.09.2010
Сообщений: 570
По умолчанию

Код:
#include <iostream>
#include <ctype.h>
#include <string>
using namespace std;
int main (){
	int c=0;
	string text;
	getline(cin,text,';');//считываем текст
	for (int i=0;i<text.length();i++)
		if (isdigit(text[i])) c++;
	cout<<c<<endl;
	system("pause");
}
Пишу ПО, создаю сайты, делаю курсовые работы, за деньги
C#, .NET, MS SQL, AngularJS, HTML, jQuery
kaljan775 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать транслитерацию другим способом tema93 Общие вопросы C/C++ 1 01.12.2010 22:12
каким способом сделат... kenta БД в Delphi 9 01.11.2009 09:07
Система линейных уравнений с тремя неизвестными, решение их матричным способом. svender Помощь студентам 8 30.05.2009 13:32
Помогите со способом реализации Airou Общие вопросы Delphi 5 28.04.2008 13:46