Найти минимальный оборот в таблице и разницу в индексах

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
drcaligari
Сообщения: 2
Зарегистрирован: 06 фев 2017, 07:42

06 фев 2017, 07:50

Здравствуйте! Помогите пожалуйста найти ошибку. Данные для ввода в таблице.
Изображение

Задание:
а) В каком году оборот был минимальным (вывести на экран год, оборот)
б) В каких годах разница в индексах экспорта США и ФРГ была не больше P? (значение P вводится с клавиатуры). Вывести год, индекс экспорта, и разницу.

Вводятся данные более менее нормально. Помогите исправить ошибку. Не выводится минимальный оборот, индекс экспорта между странами.

Извините за косой/кривой код.

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 30
#define LN 20
#define LC 15
#define LG 62
    int i;
    int n;
    int pr;
    int r;
    float pl_z;
    struct torgovlya  /*strukturniy tip torgovlya*/
        {float year;
         float oborot;
         float usa;
         float en;
         float frg;
        };
    char sg[LG+1]="---------------------------------------";
    struct torgovlya c[N]; /*tablica*/
    struct torgovlya rab;
    struct tabl
    {
        float year;
        float oborot;
        float usa;
        float en;
        float frg;
        float pl;
        float sum;
 
    }c_r[N];
    int p;
    /*promezutochnie dannie*/
        float pl;
        float sum;
        float ar_min;
        int n_min;
        int pr;
        //float r;
int main()
{
 do
{
    printf("Vvedite kolichestvo godov(ne bolshe chem %d):",N);
    scanf ("%d",&n);
    if (n<=0 || n>N)
        {
            pr=1; printf ("Oshibka!\n");
        }
        else pr=0;
}
while (pr);
 
{
    printf("Vvedite dannie o stranah\n");
    printf("%s\n",sg);
    printf("! Year ! oborot !");
    printf(" USA ! ENGLAND ! FRG !\n");
    printf("%s\n",sg);
 
do
{
    for(i=0; i<n; i++)
        {
            printf("! %d ",i+1); /*identifikaciya stroki*/
            scanf("%d",&r);              c[i].year=r;
            scanf("%d",&r);              c[i].oborot=r;
            scanf("%d",&r);              c[i].usa=r;
            scanf("%d",&r);              c[i].en=r;
            scanf("%d",&r);              c[i].frg=r;
 
    if(c[i].year<0 || c[i].oborot<0 || c[i].usa<0 || c[i].en<0 || c[i].frg<0) /*proverka ogranicheniy*/
 
            {   pr=1;
                printf("Nevernie znacheniya!\n");
                i--;
            }
            else pr=0;
        }
}
while(pr);
 
    printf("%s\n",sg);
 
do
{
    printf("Vvedite indeks eksporta:");
    scanf(" %f",&pl_z);
    if (pl_z<0)
    {
        pr=1;
        printf("Oshibka\n");
    }
    else pr=0;
}
while(pr);
 
/* ++++++++++++++++++++++zadacha b+++++++++++++++++++++++ */
    n_min=-1;
    ar_min=1.0e6;
    p=-1;
    for(i=0; i<n; i++)
    {   /*gustota naseleniya*/
        pl=c[i].frg-c[i].usa;
        sum=c[i].frg+c[i].usa;
        if (pl>pl_z);
        {
            p++;
            c[i].frg=c_r[i].frg;
            c[i].usa=c_r[i].usa;
            //c_r[p].pl=pl;
        }
 /*==============poisk minimalbogo oborota============*/
 
 
   if (c[i].oborot<ar_min)
   {
       ar_min=c[i].oborot;
       n_min=i;
   }
 
}
 /*==============VIVOD============*/
    if (p>-1)
    {
        printf("Raznica v indeksax USA i FRG," "kotoroe ne previshaet%f\n",pl_z);
        printf("%s\n",sg);
        printf("! YEAR ! indeks eksporta ! raznica !\n");
        printf("%s\n",sg);
        for (i=0; i<p; i++)
            printf("!%-17d!%-9d!% 5.2f!\n",c_r[i].year,c_r[i].sum,c_r[i].pl);
        printf("%s\n",sg);
    }
    else
        printf("stran net.\n",pl_z);
 
    printf("minimalniy oborot:%d",c[n_min].oborot);
getch();
}
}
Аватара пользователя
Romeo
Сообщения: 3091
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

06 фев 2017, 12:42

А отладчик никак не помогает? Я, возможно, вечерком гляну код, так как сейчас времени нет.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
drcaligari
Сообщения: 2
Зарегистрирован: 06 фев 2017, 07:42

06 фев 2017, 12:48

Буду очень признателен. Никак не разберусь с типом данных. Если описываю поля таблицы как int вообще ничего не пашет.
Ответить