[реклама вместо картинки]
Сделать стартовой Добавить в Избранное
Часы в заголовке окна

Форум студентов МГУ Печати ФИТиМ ИТД

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум студентов МГУ Печати ФИТиМ ИТД » Архив » Информатика (Сессия. I семестр)


Информатика (Сессия. I семестр)

Сообщений 81 страница 100 из 324

81

Tomka написал(а):

Мне кажется я что то с циклами напутала,но не могу понять что(((

я правда не Сергей Юрьевич..
Так вот,у тебя массив состоит из номера элемента последнего вхождения гласной буквы. то есть ты цикл первый зря там поставила. проще увеличивать j после каждого раза,как он найдет в строке гласную букву.

0

82

Marinka!

#include "stdafx.h"
#include <stdio.h>
void f(int M[5][5])
{ int i,j,k=0;
   
   for (i=0; i<5 ; i++)
   for (j=0; j<5; j++)
   if ((M[i][j]==0) && (i!=j))
   k++;
   if (k==20)
   printf ("prinadlegit");
else
   printf ("NEprinadlegit");
}
int main(void)
{
int A[5][5],i,j;
for (i=0;i<5;i++)
    for(j=0;j<5;j++)
    scanf("%d ",&A[i][j]);
    f(A);

return 0;
}

попробуй так...

Отредактировано Кузя (2007-01-11 15:04:05)

0

83

Кузя
Все равно не получается!  :mad: Там матрица 5х5, тоесть 25 чисел. А он просит еще одно число, тогда только выдает ответ!

0

84

2 Marinka

Всё дело в том, что в кавычках в scanf'е нельзя ставить пробел.

scanf("%d ",&A[i][j]);

0

85

Marinka!

По первой задаче:

#include <stdafx.h>
#include <stdio.h>

bool check(int M[5][5])
{
  int i, j;
  bool flag = true;
  for (i = 0; i < 5; i++)
    for (j = 0; j < 5; j++)
      if (i != j)
      { flag = flag && (M[i][j] == 0); }
  return flag;
}

int main(void)
{
  int M[5][5], i, j;
  for (i = 0; i < 5; i++)
    for (j = 0; j < 5; j++)
      scanf("%d", &M[i][j]);
  if (check(M))
  {  printf("YES");  }
  else
  {  printf("NO");  }
  return 0;
}

//можно оптимизировать, если в циклах делать проверку на flag, тк flag из false не смодет стать true
//вывод YES - то матрица удовлетворяет условию, NO - в противном случае
//главная диагональ - из левого верхнего в правый нижний

По поводу факториала:

#include <stdafx.h>
#include <stdio.h>

int main(void)
{
  int count = 0, x, n, i;
  long fact;
  scanf("%ld", &fact);
//Скоробогатов писал, что может быть изменит в условии 1000000 на ввод с клавиатуры
  for (n = 2; fact / n > 0; fact = fact / n++);
  n--;
//при вычислении границы факториала n! >= fact в n будет число, факториал которого будет не меньше чем fact
  for (i = 0; i < 8; i++)
  {
    scanf("%d", &x);
//считываем x
    if (x > n)//сравниваем с границей
    {  count++; }
//или count += x > n
  }
  printf("%d", count);
  return 0;
}

все украшательства ввода/вывода делайте сами...

0

86

Jasstina написал(а):

Сергей Юрьевич, а как будет проходить экзамен? Все сразу к 9 утра приходят, или же вы всё-таки разделите нас на три подгруппы и каждой тогда к своему времени?

Разделю на три подгруппы.

Marinka написал(а):

Помогите, плиз. ... Уже не в первой задачке он требует ввести дополнительное число

НИКОГДА не вставляйте пробелы в форматную строку функции scanf!
Я имею в виду вот это:
    scanf("%d ",&A[i][j]);
             ^
             |
             \--- пробела здесь не нужно.

Что же касается Вашей программы в целом, то она ещё содержит две ошибки.
Первую нашла Кузя, а вторая заключается в том, что Вы вызываете функцию printf из функции f (мы договаривались, что ввод/вывод осуществляется из функции main).

qwerty написал(а):

Сергей Юрьевич...
Как предпочтительней решать задачи? через функции или можно все в main напихать?
Зависит ли от стиля решения оценка?
Как вы будете оценивать задачи?

Основной вычислительный алгоритм следует оформить в виде отдельной функции, ввод/вывод - осуществлять в функции main.
Задача будет зачтена, если:
a. программа правильно работает;
b. программа написана в соответствии с вышеизложенным требованием.

Tomka написал(а):

Мне кажется я что то с циклами напутала,но не могу понять что(((

Да, Вы зря сделали внешний цикл (по j). Достаточно одного цикла, перебирающего элементы строки. Как правильно заметила Кузя, счётчик j нужно увеличивать при нахождении очередной гласной буквы.

0

87

SkAlD, не понял вот этих строк в задачах:

SkAlD написал(а):

if (i != j)
      { flag = flag && (M[i][j] == 0); }

SkAlD написал(а):

if (x > n)//сравниваем с границей
    {  count++; }
//или count += x > n

Разъясни твои логические ходы, пожалуйста  :)

0

88

Не удержался и переписал функцию check, приведённую SkAlD'ом.
Вот так будет эффективнее и, надеюсь, понятнее:

int check(int M[5][5])
{
    int i, j;

    for (i = 0; i < 5; i++)
        for (j = 0; j < 5; j++)
            if (i != j && M[i][j] != 0)
                return 0;

    return 1;
}

Эффективность достигается благодаря тому, что мы возвращаем 0 непосредственно после обнаружения первого ненулевого элемента, не принадлежащего главной диагонали.

0

89

Сергей Юрьевич, ну не пойму я никак, почему у меня вылезает один и тот же эррор:

C:\Artem\¦ЁюуЁрььv\¦юш фы  C\Task2\main.c(40): error #2120: Redeclaration of 'func' previously declared at C:\Artem\¦ЁюуЁрььv\¦юш фы  C\Task2\main.c(35): found 'double __cdecl function(double * *)' expected 'int __cdecl function'.

Он меня достал уже в четырех программах!! Ежели исправляешь тип функции с нужного double на int, как он и требует, то программа запускается, но в самый нужный момент выдает окно, о котором говорила eYe:

eYe написал(а):

У меня вопросик, почему компилятор ошыбок не выдает. а когда запускаешь вырубается и пишет что какая-то ошибка и что все данные могут быть стерты????

Вы дали ответ:

Скоробогатов написал(а):

Возможные причины: ошибки при работе с указателями, выход за границы массива.

Но никаких указателей я по крайней мере в половине из программ я не использую. Да и выход за границы массива маловероятен...  :/

0

90

:cray: Я вот теперь исправила 22задачу,но стала ещё веселее оно компилирует ,дает ввести строку ,а потом бац!!!!и ОШИБКА

0

91

Kit, приведите текст программы, пожалуйста.
Без это, боюсь, ничем не смогу помочь.

Tomka, аналогично :-)

0

92

Задача №3:

#include <stdio.h>

int i,j;
int k=0;
double sum=0;

int main(int argc, char *argv[])
{
    double a[3][4];
for(i=0;i<3;i++)
    for(j=0;j<4;j++)
    scanf("%lf", a[i][j]);
printf("%lf", func(a));
    return 0;
}

double func(double **a)
{
for(i=0;i<3;i++)
    for(j=0;j<4;j++)
    if(a[i][j]<0)
    {
        sum+=a[i][j];
        k++;
    }
return sum/k;
}

Задача №4:

#include <stdio.h>

double a[8];
int i;

int main(int argc, char *argv[])
{
for(i=0;i<8;i++)
    scanf("%lf", &a[i]);
for(i=0;i<8;i++)
    printf("%lf", func(i));
    return 0;
}

int func(int i)
{
if(a[i]<0) a[i]*=(-1);
return a[i];
}

Задача №6:

#include <stdio.h>

int i;

int main(int argc, char *argv[])
{
double a[5][4];
    int j;
for(i=0;i<5;i++)
    for(j=0;j<4;j++)
    scanf("%lf", &a[i][j]);
for(i=0;i<5;i++)
    printf("%lf ", func(a));
printf("\n");
    return 0;
}

double func(double **a)
{
int j;
double sum;
for(j=0;j<4;j++)
    sum+=a[i][j];
return sum;
}

Могу продолжить, но, думаю, не стоит.
Наверное, когда-то я что-то недопонял в теории про функции или указатели, и из-за этого постоянно что-то делаю не так...  :(

0

93

Сергей Юрьевич,мы с кузей уже разобрались(22) она долго не хотела нас слушать,но в результате заработала,тока после обнуления j ,вот-)

0

94

Kit, функция обязательно должна быть объявлена до её использования.
В Ваших программах необходимо объявить функцию func ДО функции main.

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

qwerty, приведённого фрагмента программы недостаточно для ответа на Ваш вопрос :-(

Tomka, рад за Вас :-)

0

95

Скоробогатов написал(а):

В Ваших программах необходимо объявить функцию func ДО функции main.

***** в ***** этот ******** порядок ******* ***** объявления ****** функций!!!!! Она меня два дня мучала!!!

PS Тупая ошибка, так и знал, что что-нить подобное окажется... Глупый я, глупый...  :(

0

96

http://ad.cctpu.edu.ru/cpp/Ex_Quest.htm это ответы на  вопросы

0

97

Сергей Юрьевич! Значит проблемка такая...
В принципе программу №10, где нужно составить таблицу умножения, я написал. Она выводит верный ответ, но и одновременно с верным ответом она выдает ошибку типа: "Отправлять отчет, не отправлять отчет..." В чем дело?

0

98

Сергей Юрьевич,вы не ответили на очень актуальный вопрос:можно будет на экзамене решать задачи не применяя функции и как это будет влиять на оценку??? :)

0

99

eYe написал(а):

Сергей Юрьевич,вы не ответили на очень актуальный вопрос:можно будет на экзамене решать задачи не применяя функции и как это будет влиять на оценку???

:bye:

Скоробогатов написал(а):

Основной вычислительный алгоритм следует оформить в виде отдельной функции, ввод/вывод - осуществлять в функции main.
Задача будет зачтена, если:
a. программа правильно работает;
b. программа написана в соответствии с вышеизложенным требованием.

0

100

F1aSh написал(а):

В принципе программу №10, где нужно составить таблицу умножения, я написал. Она выводит верный ответ, но и одновременно с верным ответом она выдает ошибку типа: "Отправлять отчет, не отправлять отчет..." В чем дело?

F1aSh, не вижу текста программы.
Без него я не смогу найти ошибку :-(

Ко всем на будущее: вопросы типа "Я написал программу, а она не работает. В чем дело?" без текста программы бессмысленны. Не надо стесняться размещать свои программы на форуме: никто их не украдёт :-)

0


Вы здесь » Форум студентов МГУ Печати ФИТиМ ИТД » Архив » Информатика (Сессия. I семестр)