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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2020, 20:58   #61
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Потому что условие проверяет "если нашли заглавную букву, а ее соседи оказались не маленькими", то выйти. А счетчик count сейчас считает количество индексов i, где данное условие не выполнилось. Чтобы посчитать количество заглавных букв, у которых соседи маленькие буквы, нужно менять условие. А если хочется сразу посчитать и количество и проверить, что нет заглавных букв с "плохими" соседями, то опять по-другому нужно написать.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 31.05.2020, 21:16   #62
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Понятно, а если проверять 'правильные' условия If больше будет надо будет проверить чтоб массив не заканчивался на заглавную букву.
Alexalex777 вне форума Ответить с цитированием
Старый 31.05.2020, 21:28   #63
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
int fun(char a[])
{
    int count = 0;
    for (int i = 0; a[i] != '\0'; ++i)
        if (a[i] >= 'A' && a[i] <= 'Z') {
            if (i > 0 && a[i - 1] >= 'a' && a[i - 1] <= 'z' && a[i + 1] >= 'a' && a[i + 1] <= 'z')
                ++count;
            else
                return -1;
        }
    return count;
}
Например, возвратит количество заглавных букв, соседи которых маленькие буквы. Или -1, если не у всех заглавных букв такие соседи.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 01.06.2020, 11:43   #64
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Так получилось
Код:
#include<stdio.h>
char fun(a);
void main(void)
{
	char a[] = "fBcMiGi";
	fun(a);
	printf("=%d  ", fun(a));
}
char fun(char a[])
{
	int count = 0,count1=0;
	for (int i = 0; a[i] != '\0'; ++i)
	{
		if (a[i] >= 'A' && a[i] <= 'Z')
		{
			count1++;
			if (i > 0 && a[i - 1] >= 'a' && a[i - 1] <= 'z' && a[i + 1] >= 'a' && a[i + 1] <= 'z')
						++count;
			else
				return 0;
		}
	}
	//printf("->%d ",count);
	if(count1/count==0)
			return 1;
}
Тоже интересно count в функции 3 и 3 если передавать в программу returnом тогда нормально приходит 3ка. Print не в форе возможно как то он затягивается в программу ?
Alexalex777 вне форума Ответить с цитированием
Старый 01.06.2020, 14:42   #65
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Тут получилось undefined behavior. Когда мы доходим до конца цикла в функции fun, то count1 равен count. При делении count1/count всегда будет результат единица, то есть не будет return 1. А другого return нет, так что результат возврата вообще не определен.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 01.06.2020, 16:23   #66
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Те правильнее думаю if(count1%count==0) или еще лучше вернуть
count ретурном как ты выше писал

https://habr.com/ru/post/341048/

Последний раз редактировалось BDA; 01.06.2020 в 23:10.
Alexalex777 вне форума Ответить с цитированием
Старый 01.06.2020, 18:05   #67
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Да, любые операции по сравнению count и count1 между собой бессмысленны. Так что лучше сразу return. Бегло просмотрел цикл этих статей - именно это UB не рассматривается, вроде.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 01.06.2020, 22:29   #68
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Интересная штука этот undefined behavior получается у компьютера своя логика в каких то моментах)
Alexalex777 вне форума Ответить с цитированием
Старый 01.06.2020, 22:32   #69
Alexalex777
Пользователь
 
Регистрация: 02.04.2020
Сообщений: 97
По умолчанию

Еще одну задачу решаю думаю в форе ошибке
Функция получает два массива одинакового размера. Функция должна изменить два массива.
Ввод:
a [] a b c d
b [] 1 2 3 4
Вывод:
a [] b c d 4
b [] a 1 2 3

Код:
#include<stdio.h>
char fun(char a[],char b[]);
void main(void)
{
	char a[] = "abcd";
	char b[] = "1234";
	fun(a,b);
	printf("%s",a);
	printf("\n");
	printf("%s",b);
}
char fun(char a[],char b[])
{
	int i, j;
	char temp1,temp2;
	temp1 = a[0];
	temp2 = b[3];
	for (i =3,j = 0;i<0, j<3; i--, j++)
	{
		//a[i] = a[i-1];
		//a[i] = a[i];
		a[3] = temp2;
	//	b[j] = b[j+1];
	     //b[j] = b[j];
		b[0] = temp1;
	}
}

Последний раз редактировалось Alexalex777; 01.06.2020 в 22:34.
Alexalex777 вне форума Ответить с цитированием
Старый 02.06.2020, 00:03   #70
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
#include <stdio.h>

void fun(char a[], char b[]);

void main(void)
{
    char a[] = "abcd";
    char b[] = "1234";
    printf("Before:\n%s\n%s\n", a, b);
    fun(a, b);
    printf("After:\n%s\n%s\n", a, b);
}

void fun(char a[], char b[])
{
    int i, j;
    char a_begin, b_end;
    a_begin = a[0];
    b_end = b[3];
    for (i = 3, j = 0; i > 0; i--, j++) {
        printf("a[%d] move to a[%d], b[%d] move to b[%d]\n", j + 1, j, i - 1, i);
        a[j] = a[j + 1];
        b[i] = b[i - 1];
    }
    a[3] = b_end;
    b[0] = a_begin;
}
Просто добавляйте побольше отладочного вывода при написании, чтобы было понятно, что как меняется.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 02.06.2020 в 00:06.
BDA вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разница между числами businessman Паскаль, Turbo Pascal, PascalABC.NET 6 21.05.2015 12:55
Дана последовательность из 100 вещественных чисел. Определить , со скольких чётных чисел она начинается SnS Lazarus, Free Pascal, CodeTyphon 2 22.09.2013 18:48
Прога должна строить множества Idiot Помощь студентам 2 11.12.2010 22:45
программа должна считать по этой формуле CheyZe Помощь студентам 0 25.11.2010 19:10
Евклид - программа должна запрашивать у пользователя 2 числа и считать их НОД amfisat Помощь студентам 2 17.09.2010 09:53