C, PHP, VB, .NET

Дневникът на Филип Петров


* Структури

Публикувано на 11 октомври 2008 в раздел С/С++.

Като първа стъпка при структуриране на информация в дадена програма ние се стремим да групираме логически свързаните данни в едно цяло. Пример за такова групиране са масивите. При тях обаче има едно съществено ограничение: всички елементи трябва да са от един и същи тип. Когато се налага да групираме данни от различни типове можем да използваме специалния тип данни struct:

	struct име
	{
		описание на първия елемент;
		...
		описание на последния елемент;
	};

Променливите от тип struct могат да се изброят като списък след затварящата скоба на блока в дефиницията на структурата, или допълнително на произволно място в програмата.

Пример: Променливите x и y се създават при дефиницията на структурата, а z на произволно място в програмата:

	struct time
	{
		int hour;
		int minute;
		float second;
	} x, y;

	...

	struct time z;

Обръщение към елемент на структура се извършва с операцията „.“:

	x.hour = 5;
	int k = x.hour;

Допустимо е елемент на структура да бъде масив или дори структура. Възможно е да се декларират масиви с елементи структура.

Пример: Програма, която въвежда име и номер на студент в структура, след което ги показва на екрана:

	#include "stdafx.h"
	#include "stdio.h"

	struct student
	{
		char name[30];
		float number;
	} student1;

	void main()
	{
		printf("Name of student1: ");
		scanf("%s", &student1.name);
		printf("Number of student1: ");
		float  f;
		scanf ("%f", &f);
		student1.number = f;

		printf ("Name = %s \n", student1.name);
		printf ("Number = %f \n", student1.number);
	}

Задача: Напишете програма, която по зададени кооринати на две точки определя координатите на средата на отсечката, която ги свързва.

Задача: Дефинирайте структура, която съдържа име, фамилия, години и факултетен номер на студент.
а) Напишете функция, която инициализира данните в структурата
б) Съставете масив от такива структури (данни на различни студенти) и напишете програма, която въвежда данните последователно в този масив.
в) Напишете функция, която предоставя възможност за изтриване на студент от създаните структури
г) Добавете функционалност, която позволява търсене на студент по различни критерии.
д) Организирайте програмата така, че да се изписва меню с различните възможности.

 



5 коментара


  1. Валката каза:

    Примерно решение на зад 1

    /**
    * Програма за намиране на координатите на точка нямираща се на средата на
    * на отсечка свързваща две точки с определенби координатите
    */

    #include
    #include

    #define MIN( X , Y ) (X) > (Y) ? (Y) : (X)
    #define MAX( X , Y ) (X) < (Y) ? (Y) : (X)

    struct Point
    {
    int x ;
    int y ;
    };

    Point calc(Point p1 , Point p2)
    {
    Point res;
    if(p1.x == p2.x)
    {
    res.x = p1.x;
    int min = MIN(p1.y , p2.y);
    int max = MAX(p1.y , p2.y);
    res.y = min + ( max – min ) / 2 ;
    return res;
    }
    if(p1.y == p2.y)
    {
    res.y = p1.y;
    int min = MIN(p1.x , p2.x);
    int max = MAX(p1.x , p2.x);
    res.y = min + ( max – min ) / 2 ;
    }
    int minX = MIN(p1.x , p2.x);
    int maxX = MAX(p1.x , p2.x);
    int minY = MIN(p1.y , p2.y);
    int maxY = MAX(p1.y , p2.y);
    res.x = minX + ( maxX – minX ) / 2 ;
    res.y = minY + ( maxY – minY ) / 2 ;
    return res;
    }

    int main ( int argc , char ** argv )
    {
    Point p1;
    Point p2;
    Point res;
    printf("Въведете координатите на първивата точка: x y \n");
    scanf("%d" , &p1.x);
    scanf("%d" , &p1.y);
    printf("Въведете координатите на втората точка : x y \n");
    scanf("%d" , &p2.x);
    scanf("%d" , &p2.y);
    res = calc(p1 , p2 );
    printf("Средната точка на отсечката свързваща двете точки са\n x = %d , y = %d \n" , res.x , res.y);
    system("pause");
    return 0 ;
    }

  2. Leni каза:

    Искам да попитам ако има текстов файл например
    keys.txt със съдържание
    а5
    6C
    b$
    как може да се запише първата стойност(а) като стойност на поле key на структура и прочетената 5-ца като стойност на поле value на същата структура?

  3. Не разбрах

  4. Leni каза:

    Идеята ми е как може като прочетем стойности от даден ред от текстови файл и прочетените стойности да се записват като стойности на две полета на дадена структура.Ако във файла на един ред има записано следното Sинтервал$( S $)
    иска се S да се запише като стойност на полето key на структурата, а $ като стойност на поле key.

  5. Искаш поредица от символи от файл да бъдат използвани като име на променлива?

    В C имената на променливите се задават по време на компилация. Тоест те са фиксирани предварително – не можеш да прочетеш файл, да вземеш текст от него и да го използваш за име на променлива.

    Още повече – няма особен смисъл от такова действие. Даже никакъв :)

Добави коментар

Адресът на електронната поща няма да се публикува


*